2

テスト用に2つのAndroidデバイスがあります。1 つは解像度 480x320 で、もう 1 つは 800x480 です。layout-normal および layout ディレクトリで異なるレイアウトを定義します。また、layout-hdpi、layout-mdpi などのさまざまな組み合わせで試しました。

どこかのログから、デバイスがデバッグ目的でどのレイアウト カテゴリに該当するかを知る方法はありますか。実行時に使用されるディレクトリのレイアウト ファイルを知りたいです。そうでない場合、誰かが前述の解像度を持つ 2 つのデバイスのレイアウト ディレクトリの正しい組み合わせを教えてくれます。

前もって感謝します。

4

2 に答える 2

9

実行時に使用されるレイアウト (フォルダなどからlayout-ldpi)を見つけるため。layout-mdpiレイアウトでタグ属性を使用できます。たとえば、異なる画面用に 2 つのレイアウトを定義したとします。1 つはlayout-mdpiフォルダー内、もう 1 つはフォルダー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
}
于 2012-07-11T22:14:48.220 に答える
1

これは、要素の使用方法に応じて機能する可能性のある@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 を決定するために現在のレイアウトを確認する必要があるからです。

于 2013-02-28T14:27:00.823 に答える