web-dev-qa-db-ja.com

10 "および7"レイアウトを適切に含める方法

Nexus 7:7 "1280x800

Galaxy tab 10.1 10 "1280x800

アプリを7インチと10インチのタブレットで実行したい。私の知る限り、これらのレイアウトフォルダーをアプリに含める必要があります。

7インチタブレット用

  • layout-sw600dp
  • layout-sw600dp-port

10インチタブレット用

  • layout-sw720dp
  • layout-sw720dp-port

Nexus 7では正常に動作しますが、10インチタブレットにsw600dpレイアウトを読み込みます。

これらのデフォルトフォルダーを含める場合:

  • レイアウト
  • レイアウトポート

10インチのgalaxyタブはこれらからレイアウトを読み込みます。

デフォルトのレイアウトフォルダーとsw600dpフォルダーのみを含めると、nexus7でクラッシュします。

10インチのギャラクシータブでsw720pレイアウトが読み込まれない場合、どのように電話、7インチタブレット、10インチタブレットをサポートするのですか?

編集:フォーマット

40
berestom

問題は、デフォルトのレイアウトフォルダがなかったことです。

Sw600dpおよびsw720dpフォルダーのみを使用して、試してみました。なぜ機能しないのかはまだわかりませんが、気にしません。とにかくswxxxdp <3.2を使用できないので、それをねじ込みます。

したがって、電話(2.2 +)、7インチタブレット、10インチタブレットをサポートする必要があるアプリを作成する場合は、次のオールドスクールのものを使用します。

layoutこれはデフォルトです。電話をサポートする予定がない場合でも必要です!

layout-large7インチタブレット用(エミュレーターおよびnexus7で動作)

layout-xlarge10インチタブレット用(エミュレーターとgalaxytab10.1で動作)

他の人 も同じ結論に達しました。

58
berestom

また、アプリケーションでこのような問題に直面しています。しかし、これには良い解決策が見つかりました。 tabletのレイアウトは1つしかなく、ディレクトリ名はlayout-sw600dpです。さて、部品の高さと幅の問題が発生したときに、valuesfont sizeおよびその他のスタブを配置するいくつかの異なるdimensionsディレクトリを作成しました。したがって、タブレット画面のconstantにはlayout値はありません。

androd:layout_width:"60dp" // i drop this scenario

androd:layout_width:"@dimen/tab_width" // i used this scenario

valuesディレクトリ名は次のようになります

values-xlarge
values-large

すべての値は、値ディレクトリから取得されます。別のレイアウトは作成されませんが、1つのレイアウトを複数回使用できます。

以下はDeveloper.Androidサイトの言葉です。構成例

さまざまなタイプのデバイス向けにいくつかのデザインをターゲットにするために、一般的な画面幅のいくつかの数値を以下に示します。

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7” tablet (600x1024 mdpi).
720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

表2のサイズ修飾子を使用すると、アプリケーションは、幅や高さに任意の数値を使用して、ハンドセットとタブレットのさまざまなレイアウトリソースを切り替えることができます。たとえば、タブレットレイアウトでサポートされる最小の幅が600dpである場合、次の2つのレイアウトセットを提供できます。

res/layout/main_activity.xml#ハンドセット用
res/layout-sw600dp/main_activity.xml#タブレット用

===

これでは、1280 * 720のレイアウトがlayout-sw720dpの下にあることがわかります。したがって、layout-normal-xlargeを作成する代わりに、違いを判断できるこのことを使用する必要があります。 layout-large-mdpilayout-large-ldpiを使用して別々に識別するのではなく、単にsmallest widthで識別しませんか? Android=さまざまな画像にdrawablesディレクトリを提供するため、解像度のみが問題となります。上記の解決策があります。

編集

次に、異なるレイアウトを開発する必要があります。他のオプションはありません。 http://jamil.fluidsoul.net/2011/03/06/creating-Android-applications-for-multiple-screen-sizes で見つけました。

Low density Small screens QVGA 240x320 (120dpi):

layout-small-ldpi (240x320)  
layout-small-land-ldpi (320x240)

Low density Normal screens WVGA400 240x400 (x432) (120dpi):

layout-ldpi  (240 x 400 )
layout-land-ldpi  (400 x 240 )

Medium density Normal screens HVGA 320x480 (160dpi):

layout-mdpi (320 x 480 )
layout-land-mdpi (480 x 320 )

Medium density Large screens HVGA 320x480 (160dpi):

layout-large-mdpi (320 x 480 )
layout-large-land-mdpi (480 x 320)

Galaxy Tab ( 240 dpi ):

layout-large  (600 x 1024) 
layout-large-land  (1024 x 600)

High density Normal screens WVGA800 480x800 (x854) (240 dpi):

layout-hdpi (480 x 800)
layout-land-hdpi (800 x 480)

Xoom (medium density large but 1280x800 res) (160 dpi):

layout-xlarge (800 x 1280)
layout-xlarge-land (1280 x 800)
21
Chintan Rathod

はい、レイアウトに依存するフォルダーを使用する必要がありますが、デバイスに依存しないレイアウトがres/layoutフォルダーにあることも確認してください。

これは、Android開発者サイトで言及されていますが、サイズの大きいデバイスや通常サイズのデバイスをサポートするアプリのlayout-xlargeフォルダーでのみ使用可能なレイアウトがある場合、小さいデバイスはこのリソースに一致するものを見つけることができないため、アプリはクラッシュします。

良いフォルダー構造は次のとおりです。

res/layout

そこにデバイスに依存しないレイアウトを保持します。可能なすべての修飾子タイプを考慮している場合、これを回避できますが、これは依然として安全なオプションです。

たとえば7インチと10インチのタブレットに特定のレイアウトを追加する場合は、次のすべてを使用します。

res/layout-large
res/layout-xlarge
res/layout-sw600dp
res/layout-sw720dp
res/layout-sw800dp

など、サポートする特定のデバイス画面幅についても同様です。 sw600は最小幅をサポートしているため、デバイスが横向きになっているときに画面幅を使用しないように注意してください。 swxxxdp qualifersを使用することをお勧めしますが、これらはAPI 13で追加されたため、大規模なxlargeが必要になります。古いAndroid OS。

Dpiの使用に関して、サイズに1つの密度修飾子のみを設定する場合、たとえばlayout-large-mdpiの場合、大きな修飾子に一致するデバイスは別のフォルダーではなく、ここからのレイアウトを使用することに注意してください。 ここ について読むことができるベストマッチ基準に。密度に一致する前に大きなデバイスとして一致するため、非MDPI密度画面でもこれらのレイアウトが使用されます。

これに対抗するには、サポートする他の密度のフォルダーも含める必要があるため、上記の例に続くlayout-large-hdpiを使用し、mdpiフォルダーで使用したレイアウトのhdpiバージョンのレイアウトをこのフォルダーに含めます。それらは異なっている必要があります。

もちろん、レイアウトの重複も避け、res/layoutでのみ必要な場合は、デバイスに依存しないレイアウトをすべての未使用フォルダーにコピーしないでください。これらの修飾子を必要とするレイアウトのみをフォルダーに入れて、適切に整理してください、密度/サイズの組み合わせに間違ったフォルダーを使用しないように、適切な優先順位の修飾子を使用してフォルダーに名前を付けます。

2
sturrockad

あなたは正しいことをしているので、これは非常に奇妙です。

Nexus 600ではsw600dp修飾子を選択する必要があります。
利用可能な場合、sw720dp修飾子はGalaxyタブで選択する必要があります。

適切なレイアウトを見つけようとするとクラッシュしますか? Androidは正しいレイアウトを見つけることができますが、レイアウトxmlファイルの何かが欠落している可能性があり、クラッシュが原因です。

1