2011-10-05 25 views
22

Android用のアプリケーションを作成しています。タブレットでは横向き、携帯電話では縦向きにしたいと考えています。しかし、私はデバイスの2つの別々の方向を欲するという目的を打ち破った、私が見たものからオリエンテーションロックしかできないかのように思えます。携帯電話の肖像画、タブレット用の風景(Android-Layout)

錠:風景 電話:ポートレート

それはより多くの技術的な置くこと。

「res/layout-xlarge-land」のタブレット上の造園用のレイアウトがあり、元のレイアウトは「res/layout」になっていますので、タブレットにはレイアウトxlarge-landを明示的に使用したいだけです。基本的にはxlargeデバイス用のランドスケープのみを使用します。

ありがとうございます!

答えて

42

タブレットより密度が高い携帯電話があるため、デバイスの密度に基づいて特定の向きを設定すると機能しないことがあります。私が何をしたか

は、このようなマニフェストファイルにアクティビティタグ内の属性を設定することで、デバイスの方位センサーを無効にすることでした:

android:screenOrientation="nosensor" 

アプリを実行すると、デフォルトで縦向きが電話に設定されていますタブレット用のランドスケープ(したがって、xmlファイルはlayout-xlarge-landから選択されます)。方向ロックを設定しているので、この向きにとどまります。

+6

Nexus 7は携帯電話とみなされ、ポートレートモードで表示されます。 – Nezneika

+0

私の答えはこの問題に対処していますので、それを確認してください – Dante

+0

オリエンテーションロックはどのように設定しましたか? –

0

あなたの言っていることは完全にはわかりませんが、解像度を測定してそれに応じて行動する必要があるようです。つまり、解像度が違う以外は、それが電話かタブレットかどうかをどのように知っていますか?

+0

さて、私はそれをより専門的にすると思います。私は "res/layout-xlarge-land"のレイアウトをタブレット上に作っています。私は "res/layout"で元のレイアウトを持っていて、単にレイアウトxlarge-landをタブレットに使用したいだけです。基本的にはxlargeデバイス用のランドスケープのみを使用します。 – rwarner

+0

コードで、画面のレイアウト方法と、画面の寸法に基づいて適切なレイアウトXMLからの引き出し方法を指定できます。 –

1

あなたは、デバイスの(インチで)実際のサイズを測定し、その後、プログラムで使用して方向を設定することができます

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

または

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

をすることができますデバイスの物理的なサイズを取得するには発行されたコードhereを使用してください。

これは100%正確ではありませんが、アプリを実行しているデバイスのキングを決定するのに十分です。

-2

"layout-large"フォルダレイアウトのレイアウトメニューと "layout"フォルダのレイアウトメニューのllPhoneレイアウトにllTabletというレイアウトを設定します。メニューでは、ユーザーが入力している最初のレイアウトを参照します。次に、参照できるかどうかを確認します。 llPhoneを参照できない場合は、タブレットを参照してください。

llPhone = (LinearLayout) findViewById (R.id.llPhone) 
if (llPhone == null) { 
tablet = true; 
} 
else { 
tablet = false; 
} 
関連する問題