2

レイアウトの自動切り替えは、私の 2 つのデバイスの 2 つのレイアウトでは問題なく機能しますが、3 つ目のデバイスでは機能しません。

私は 2 台の Android フォンを持っています (ここでは、ppi は dpi と同じであると想定しています)。

  • HTC デザイア - (480x800; 252 dpi; Android 2.2)
  • HTC Sensation - 長辺が >600dp (540x960 ピクセル; 256 dpi; Android 4.0.4)
  • Sony Xperia Z - 長辺が >690dp (1080x1920 ピクセル; 443 dpi; Android 4.2.2)

そこで、3 台の携帯電話の画面を処理するために次のレイアウトを作成しました (私のアプリは横向きビューしかサポートしていないため、利用可能な最小幅sw<N>dp修飾子は使用していません。したがって、画面の長いサイズのみを気にします)。

/res/layout/main.xml
/res/layout-w600dp/main.xml
/res/layout-w690dp/main.xml

/res/layout/main.xmlHTC Desire と HTC Sensation ではレイアウトが正しく表示されますが/res/layout-w600dp/main.xml、Xperia Z では正しく表示されません ( の/res/layout/main.xml代わりに表示されます/res/layout-w690dp/main.xml) 。

私は何か見落としてますか?

私のアプリは Android 4.0 をターゲットにしています (そのため、Android 3.2 以降の画面サイズ修飾子のみを調べています)。

実行時に画面サイズを確認してから適切なレイアウトを選択しようと考えましたが、その場合は修飾子が使用されますね。

現時点で私のmanifest.xml:

...
<uses-sdk android:minSdkVersion="8"
        android:targetSdkVersion="14" />
    <supports-screens
            android:smallScreens="true"
            android:normalScreens="true" 
            android:largeScreens="true"
            android:xlargeScreens= "true"
            android:anyDensity="true" />
...

更新
DensityMetrics を使用して携帯電話の画面の密度を検出しましたが、実際には PPI の数値と同じではありません。

  • HTCセンセーション - 240dpi
  • Xperia Z - 480dpi

したがって、HTC Sensationa と Xperia Z はどちらも 360dp x 640dp のサイズです。1 つのレイアウトを削除し、以下を保持します。

/res/layout/main.xml
/res/layout-w600dp/main.xml

アプリを実行すると、HTC Sensation には/res/layout-w600dp/main.xmlレイアウトが表示されますが、Xperia Z には/res/layout/main.xml.

何が起こっている?

4

1 に答える 1

1

Xperia Z のランドスケープの画面サイズ修飾子として w500dp-land を使用しました。これは少なくとも機能しますが、w600dp-land は無視されます。理にかなっているデバイスを確認した後: https://play.google.com/store/apps/details?id=com.sturnus.screeninfoによると、Xperia Z dp の寸法は 360 * 592 です。

于 2013-11-07T17:31:32.093 に答える