2

私は Android アプリ (API 11+) を開発しており、複数の画面サイズと密度をサポートしたいと考えています。私のプロジェクトには、描画可能なリソース (mdpi、hdpi、xhdpi、xxhdpi) を提供するさまざまな密度のフォルダーと、修飾子 (小さい) を持つさまざまなレイアウト フォルダーがあります。 、ノーマル、ラージ、特大)。

Google ドキュメントから:

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp

「dp」の単位は理解できたと思います。私が間違っていなければ、mdpi デバイスでは 1px=1dp であるため、480x800px の mdpi 電話画面には 480x800dp の単位があるため、この画面は大きくする必要があります。同じサイズと密度のタブレットは大きすぎませんか?

この 2 つのデバイスに異なるレイアウトを提供するにはどうすればよいですか? どうすればそれらを区別できますか?

4

3 に答える 3

1

おそらく、あなたが話している mdpi デバイスはかなり大きいでしょう。タブレットのように。しかし、これらのあいまいさのため (そして、異なるデバイスがサイズ/dpi 値を間違って報告したため)、Android は別のアプローチを考え出すことにしました。Android 13 以降のみをターゲットにすることを再検討できる場合 (11 ~ 12 の市場シェアは約 0% であるため、これは合理的です)、swXXXdp (最小幅の dp) フィルターを使用できます。

    res/layout-mdpi/content.xml          for phones and phablets
    res/layout-sw600dp-mdpi/content.xml  for 7" tablet
    res/layout-sw720dp-mdpi/content.xml  for 10" tablet and above

ここでは、dpi 値はあまり重要ではありません。これらの画像をよりくっきり/洗練されたものにしたい場合にのみ使用できます。

于 2014-10-28T12:26:42.690 に答える
1

ドローアブル用にさまざまなフォルダーがあるのと同じように、画面サイズ用にさまざまなレイアウトを作成できます。

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

Android ドキュメントから: http://developer.android.com/guide/practices/screens_support.html

編集: デバイスがハンドセットかタブレットかをプログラムで検出するには、次のコードを使用できます。

public static boolean isTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

次に、アクティビティで、前の値に応じて異なるレイアウトを設定できます。

@Override
onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    if isTablet(this)
        setContentView(R.layout.handset_main_layout);
    else
        setContentView(R.layout.tablet_maint_layout);
}

これはほんの一例です。

于 2014-03-04T14:06:57.610 に答える