レイアウトの自動切り替えは、私の 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.xml
HTC 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
.
何が起こっている?