2011-01-27 7 views
3

私のアプリでは、ほとんどの電話ユーザーがほとんどの時間、縦向きを使用している(片方の手で装置を保持している)と仮定しているため、現在のところ、一部のアクティビティでは縦向きにしか対応していません。両方の向きを一部の画面サイズでサポートすることはできますか?

しかし、新しいハニカムタブレットでは、ユーザーがより頻繁に風景の向きを使用するように思われるので、私はもっと多くの自分の活動のために両方の向きをサポートしたいと思います。

小さい画面サイズ(QVGAまで)の横向きレイアウトを追加する必要はないと思いますので、xlarge画面のみの風景をサポートする方法があるかどうか疑問に思っています他のタイプのものではありません。

あなたが combine the orientation and size attributes on the resource objectsようにすることができます
+1

私は同じ問題を抱えていて、この非常に主題についてブログの記事を書きました。 私はいくつかの解決策を提示しています: http://androidblogger.blogspot.com/2011/08/orientation-for-both-phones-and-tablets.html – alocaly

答えて

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 

は小さい画面サイズのためのあなたの肖像画のみのレイアウトにlayout-portディレクトリを使用して、あなたが同じレイアウトファイルを使用したい場合はlayout-xlargeディレクトリにXLARGEのレイアウトを追加xlargeの縦と横の場合は、layout-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()を使用すると、方向センサーが上書きされます。

+0

私はそれが問題を完全に解決するかどうかはわかりません。私は小さい画面サイズのための横長のレイアウトを定義していないし、試して読み込みに失敗したときにアプリがクラッシュすることはありませんか?おそらく、私はその例外をキャッチし、その場合Activity.setRequestedOrientation()を使用して方向を強制的にポートレートに強制することができます。私はそれを試してみましょう。 –

+0

うん、それは働いた!私はあなたの答えをいくつかの詳細で編集し、それを受け入れます。 –

+0

興味がある場合は、これらの機能を使用してアプリにタブレットサポートを追加する記事と便利なサンプルコード(http://goo.gl/lce12 –

関連する問題