在运行时使用明知布局(Knowing layout used at runtime)

2019-09-19 08:32发布

我测试了两款Android设备。 一个是小480x320的分辨率等是800×480。 我定义布局正常和布局目录不同的布局。 我也有布局,华电国际,布局MDPI等不同组合的尝试。

有没有办法从日志某处要知道在哪个布局类的设备正好落在用于调试目的。 我想知道从哪个目录在运行时使用的布局文件。 如果没有,那么可能会有人告诉我,布局目录的正确组合与前期提到的分辨率两台设备。

提前致谢。

Answer 1:

为了找到其中的布局(从layout-ldpilayout-mdpi文件夹等)运行期间使用。 您可以使用标签属性上的布局。 例如假设您已经定义了两个布局不同的屏幕,一个在layout-mdpi文件夹和其他的layout-hdpi文件夹。 事情是这样的:

<?xml version="1.0" encoding="utf-8"?>
<!--Layout defined in layout-mdi folder-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:tag="mdpi"
    android:orientation="horizontal" >

    <!-- View and layouts definition-->
<!LinearLayout>

和:

<?xml version="1.0" encoding="utf-8"?>
<!--Corresponding Layout defined in layout-hdi folder-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:tag="hdpi"
    android:orientation="horizontal" >

    <!-- View and layouts definition-->
<!LinearLayout>

要检查哪些布局在运行期间使用,就可以使用这样的事情:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.MainLayout);
if(linearLayout.getTag() != null) {

   String screen_density = (String) linearLayout.getTag();
}

if(screen_density.equalsIgnoreCase("mdpi") {
   //layout in layout-mdpi folder is used
} else if(screen_density.equalsIgnoreCase("hdpi") {
   //layout in layout-hdpi folder is used
}


Answer 2:

下面是@ Angelo的答案的扩展,它可以根据您如何使用您的要素的工作:在每一个文件,如果你有,你就不需要操作相同的元素,你可以给它一个定义每个布局不同的ID (相对于标记的话)。

例如,说我不需要操纵基地线性布局,我只需要操纵它里面的观点。

这里是我的华电国际布局:

<?xml version="1.0" encoding="utf-8"?>
<!--Corresponding Layout defined in layout-hdpi folder-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout-hdpi"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
    <!-- View and layouts definition-->
</LinearLayout>

这里有一个MDPI布局:

<?xml version="1.0" encoding="utf-8"?>
<!--Corresponding Layout defined in layout-mdpi folder-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout-mdpi"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
    <!-- View and layouts definition-->
</LinearLayout>

这里是我的代码决定哪些布局是:

if ( findViewById(R.id.layout-hdpi) != null ) {
    //we are in hdpi layout
} else if ( findViewById(R.id.layout-mdpi) != null ) {
    //we are in mdpi layout
}

我们的想法是,只有一个你定义该项目翻过您不同的文件实际上会存在的IDS,以及哪一个做的是在实际加载的布局。 需要说明的是,如果你确实需要在以后操作该项目,这种方法产生了许多额外的工作,可能是不理想的。 你不希望因为你必须检查哪些布局你在决定使用哪个ID来获取编辑文字使用上的某个项目这种技术,如一个EditText。



文章来源: Knowing layout used at runtime