これは、要素の使用方法に応じて機能する可能性のある@Angeloの回答の拡張です。各ファイルで、操作する必要のない同じ要素がある場合は、定義するレイアウトごとに異なるIDを与えることができます(タグ付けとは対照的に)。
たとえば、基本的な線形レイアウトを操作する必要はなく、その中のビューを操作するだけでよいとします。
これが私の hdpi レイアウトです。
<?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
}
アイデアは、異なるファイル全体でそのアイテムに対して定義した id の 1 つだけが実際に存在し、実際にロードされたレイアウトに存在するものはどれでもあるということです。注意点として、後でそのアイテムを実際に操作する必要がある場合、この方法は余分な作業が多くなり、おそらく理想的ではありません。EditText などの項目でこの手法を使用したくないでしょう。編集テキストを取得するために使用する ID を決定するために現在のレイアウトを確認する必要があるからです。