3

私のアプリでは、現在、一部のアクティビティで縦向きのみをサポートしています。これは、ほとんどの電話ユーザーがほとんどの場合、縦向きを使用している (そしてデバイスを片手で持っている) と想定しているためです。

ただし、新しい Honeycomb タブレットでは、ユーザーが横向きを使用する頻度がはるかに高くなる可能性が高いと思われるため、より多くのアクティビティで両方の向きをサポートしたいと考えています.

ただし、小さい画面サイズ (QVGA まで) に戻って横向きのレイアウトを追加する必要はありません。他人。

4

1 に答える 1

8

次のように、リソースオブジェクトの方向属性とサイズ属性を組み合わせることができます。

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-xlargelayout-xlarge-landlayout-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()これにより、アクティビティがポートレートモードで再作成され、を使用すると方向センサーがオーバーライドされるため、アクティビティが再度変更されることはありません。

于 2011-01-27T08:55:32.240 に答える