3

この動作が期待されておらず、標準的でもないことはわかっていますが、それが実現できるかどうかは興味があります。Google はまた、normal-large-xlarge スキームが最適ではないことを認識したため、 Android 3.2から非推奨になりました。(layout-swXXXdp が私にとって最良の選択です)

ただし、サポートしなければならない 3.2 未満のデバイスがあり、このシステムが原因で誤動作する可能性があります。

主な問題:

Galaxy Note 1 と Galaxy tab 1 (および同じ仕様の他のデバイス) は、同じlayout-largeフォルダーからリソースを選択します。しかし、合理的には、7 インチ未満の画面と 7 インチ以上の画面では異なるレイアウトを作成する必要があります。「例外デバイス」用に別のフォルダーを作成できることはわかっています (ここで説明した layout-large-xhdpi-1280x800 など)。特定のデバイス。

したがって、目標は、7 インチ未満のデバイス用と 7 インチ以上のデバイス用に 1 つの xml パッケージ (フォルダー) のみを維持することです。次のようなトリックがあることを知っています。

  1. xml-s に異なる名前を付け (main.xml と main-large.xml)、どちらを選択するかをコードで決定しますが、デバイスでさえコードから自分自身について決定することはできません。 6.8 から 7.8 インチのスケールに戻します)。また、リソース フォルダーでより「androidy」な方法を使用したいと思います。
  2. 私が述べたように、例外フォルダーを維持します。layoutlayout-largelayout-specifictags1layout-specifictags2およびリストを広げることができます。また、specifictags1、tags2、および normal にはまったく同じ xml ファイルがありますが、layout-large. 全体の理由は、これを回避することです。
  3. (編集) エイリアスを使用するというアイデアは、@Joe Malin によって思いつきました。残念ながら、 でlayout-large-xhdpi-1280x800main.xml を参照する main.xmlという名前のエイリアスを作成することはできませんlayoutlayout-large-xhdpi-1280x800したがって、にのみ存在するmain.xmlを参照するfakemain.xmlを維持する必要がありlayoutます。layoutしかし、コードからのレイアウトを気にする必要がなく、エイリアスである fakemain.xml のみを使用する必要がないため、 に fakemain.xml も必要です。ただし、このソリューションはまだ機能する可能性がありますが、残念ながら実際には機能していません。に fakemain.xml がlayoutありlayout-largelayout-large-xhdpi-1280x800galaxy note の場合、エイリアスはlayout-largeエイリアスを使用しても何も達成できませんでした。

質問:

layout-sw600dp の概念は、最適で必要な動作を実現しますが、API レベル 13 ではサポートされていません。

  • デバイスにこのフォルダから強制的に選択させる方法、またはその変数を (java リフレクションを使用して) 上書きする方法はありますか? - それはかなり悪いことです) 大きくない通常の画面のように動作しますか?
  • 2 つの xml パッケージ (フォルダー) のみを維持する方法はありますか。
    • 1 つは 7 インチ未満のデバイス用、
    • もう 1 つは 7 インチ以上のデバイス用です。
4

3 に答える 3

1

ただし、サポートする必要がある3.2未満のデバイスがあります

それほど多くはありません。

デバイスにこのフォルダーからの選択を強制する方法、またはその変数を(Javaリフレクションを使用して)上書きして、大きくない通常の画面のように動作させる方法はありますか?

いいえ。ただし、これらのいくつかのデバイスのモデル番号を確認し、それらに異なるレイアウトをロードすることを選択できます(たとえば、R.layout.main通常、R.layout.you_are_worrying_about_this_way_too_muchAPIレベル13より前の7インチタブレットのいくつかのモデルの場合)。

2つのxmlパッケージ(フォルダー)のみを維持する方法はありますか?1つは7インチ未満のデバイス用、もう1つは7インチを超えるデバイス用です

安全のために、私は3つで行きます:

  • res/layout/以下の場合-7"
  • res/layout-sw600dp/7インチ以上の場合
  • res/layout-xlarge/、おそらく、res/layout-sw600dp/3.2にアップグレードされなかった少数のXOOM、タブ10.1などのエイリアスを使用します。
于 2013-03-15T00:22:22.547 に答える
1

最後に、私は最善の解決策を得たと思います。どういうわけか、エイリアスには2つのタイプがあることに気づきませんでした。@Joe Malinがリンクしたもの、およびこのタイプ

最初のタイプは残念ながら解決策ではありませんでしたが、2 番目のタイプはまさに私が探していたものであり、開発者ページには必要な解決策が記載されています。

res/layout/main.xml: 単一ペインのレイアウト

res/layout-large: マルチペイン レイアウト

layout res/layout-sw600dp: マルチペイン レイアウト

最後の 2 つのファイルは同一です。1 つは Android 3.2 デバイスに対応し、もう 1 つは以前のバージョンの Android を搭載したタブレットや TV 用です。

タブレットと TV で同じファイルが重複すること (およびそれに起因するメンテナンスの頭痛の種) を避けるために、エイリアス ファイルを使用できます。

layoutしたがって、フォルダー内の他の名前のレイアウトでレイアウトの違いを作成する必要があります。のようlayout/mainnormal.xmllayout/mainlarge.xml。次にlayout.xml、別のフォルダーで作成し、上記のリンクvaluesで定義されているようにエイリアスを作成する必要があります。

たとえば、values/layout.xmla values-large-xhdpi-1280x800/layout.xml(galaxy Note の場合) a values-large/layout.xml(より大きなデバイスの場合) と、おそらくlayout-sw600dp/layout.xml.

mainnormal.xml最初の 2 つでは、と のエイリアスを作成する必要がありますmainlarge.xml。このようにして、使用しているタイプをコードで知る必要がなくなります。たとえば、ID を使用するだけですR.layout.main

layout.xml最初の 2 つの場合:

<resources>
    <item name="main" type="layout">@layout/mainnormal</item>
</resources>

後者の場合:

<resources>
    <item name="main" type="layout">@layout/mainlarge</item>
</resources>
于 2013-03-18T11:04:11.943 に答える
0

エイリアス リソースを作成すると役立つでしょうか: エイリアス リソースの作成?

于 2013-03-12T00:17:02.390 に答える