6

私のアプリケーションは、画面構成に応じて、1 ペイン UI または 2 ペイン UI のいずれかを表示します。小さい画面では、縦向きと横向きの両方で 1 ペインにする必要があります。中サイズの画面 (「最小幅」が 600 dp 以上のもの) では、横向きは 2 ペイン レイアウトに非常に適していますが、縦向きでは 1 ペイン レイアウトを使用する必要があります。大きな画面では、どちらの向きでも 2 ペイン レイアウトを使用する必要があります。また、3.2+ スタイルの修飾子 (sw600dp や sw720dp など) と、古い「サイズ バケット」修飾子 (「xlarge」) もサポートしたいと考えています。

これを行う最も直接的な方法は、構成ごとに 1 つずつ、いくつかの異なる XML レイアウト ファイルを作成することです。

  • res/layout-sw600dp-land/main.xml
  • res/layout-sw600dp-port/main.xml
  • res/layout-sw720dp-land/main.xml
  • res/layout-sw720dp-port/main.xml
  • res/layout-xlarge-port/main.xml
  • res/layout-xlarge-land/main.xml
  • res/layout-port/main.xml
  • res/レイアウト/main.xml

その結果、これらの 8 つの XML ファイルには多くのコードの重複があり、基本的に 2 つの異なるレイアウトのみを記述しています。

メンテナンスの頭痛の種であるこれらすべての重複した XML ファイルを維持する必要なしに、どうすればこれを行うことができますか?

4

1 に答える 1

11

レイアウト エイリアスを使用できます。各画面構成の XML ファイルにレイアウトを直接記述するのではなく、「onepane.xml」と「twopanes.xml」などの 2 つの XML ファイルで 2 つのレイアウトを定義する必要があります。これらのファイルは res/layout に入ります。

ここで、これらのレイアウトを別の画面構成にマップする必要があります。そこで「レイアウト エイリアス」テクニックが役に立ちます。画面修飾子の組み合わせごとに、res/values-X/layout.xml に XML ファイルを作成します。ここで、X は修飾子の組み合わせです。そのファイルで、必要に応じて @layout/onepane または @layout/twopanes を指すレイアウト リソースを宣言します。

res/values-sw600dp-land/layout.xml:

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

res/values-sw600dp-port/layout.xml:

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

他の構成の組み合わせについても同じことを行うと、探しているものを達成できます。レイアウトを複製することなく、2 つのレイアウト (onepane と twopane) をいくつかの異なる画面構成にマップできます。

詳細については、Android トレーニングの「複数画面のサポート」レッスンをご覧ください: http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

于 2012-04-04T21:18:39.350 に答える