次のように、リソースオブジェクトの方向属性とサイズ属性を組み合わせることができます。
res/layout/ -- default
res/layout-port/ -- portrait for any screen size
res/layout-xlarge/ -- any orientation on xlarge screens
res/layout-xlarge-land/ -- landscape on xlarge screens
画面サイズが小さい場合は縦向きのみのレイアウト用のディレクトリを使用し、xlargeで縦向きと横向きに同じレイアウトファイルを使用する場合layout-port
はディレクトリにxlargeレイアウトを追加します。または、に応じて異なるレイアウトファイルが必要な場合はディレクトリに追加します。オリエンテーション。layout-xlarge
layout-xlarge-land
layout-xlarge-port
次に、画面の小さいデバイスで横向きに回転すると、OSは横向きのレイアウトを読み込もうとしますが、一致するものがないために失敗し、をスローしResources.NotFoundException
ます。ただし、その例外をキャッチし、以下を使用して、これらの場合にアクティビティをポートレートモードに強制することができますActivity.setRequestedOrientation()
。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
setContentView(R.layout.titlescreen);
} catch (Resources.NotFoundException e) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
return;
}
[...]
}
setRequestedOrientation()
これにより、アクティビティがポートレートモードで再作成され、を使用すると方向センサーがオーバーライドされるため、アクティビティが再度変更されることはありません。