0

画面全体をカバーするグリッドに配置したい基本的に同一のビューが12あります。デバイスの向きに応じて、3x4 または 4x3 グリッドを使用したいと考えています。

私が理解している限り、このトピックには基本的に 3 つのアプローチがあります。

  1. 使うGridView
  2. ネストされたLinearLayoutインスタンスを使用する
  3. 使うTableLayout

そんなレイアウトにしたい

  1. 向きの変更に自動的に適応します (同様GridViewに)
  2. 利用可能なすべての画面スペースを使用します (ネストされたLinearLayoutインスタンスと同様)
  3. スクロールを許可しません(それがないと、「これ以上スクロールできません」という効果がありませんGridView
  4. すべてのアイテムを強制的に同じサイズにすることができます

デフォルトでは、 にGridViewはスクロール機能があり、画面いっぱいに表示されませんが、LinearLayoutTableLayoutは向きの変化に自動的に適応しません。

現在、スクロールを無効GridViewにして、向きとコンテナの高さに応じて項目ビューの最小高さを設定し、画面を強制的に塗りつぶすカスタムアダプタを使用しています。これは機能しますが、本当に醜いハックのように感じます。

LinearLayout私は試したことはありませんが、方向に応じてネストされたインスタンスを動的に構築することもおそらく機能します。

これは頻繁な目標 ( 1234 ) のようですが、提案された解決策はすべて私のものと同じくらいハックであるか、私の要件の一部を満たしていません。

私は Android 開発に慣れていないので、何か不足しているかどうかわかりません。

これを実装する最適な方法は何ですか?

API レベル 8 以上を対象としています。

4

1 に答える 1

1

GridView を使用する

AGridViewは、より大きなデータ セットを含むグリッドのような方法でデータを表示する場合に使用するウィジェットです (GridViewのリサイクル メカニズムにより、通常の構築された階層よりも優れたパフォーマンスが得られるため)。最初からすべてのビューを表示したいので、これはあなたのケースではありません。私の観点からは、 a のオーバーヘッドGridViewはそれだけの価値があるわけではありません。

ネストされた LinearLayout インスタンスを使用する

良いオプションですが、ネストされたウェイトは避けてください。代わりに、中央のアンカー ビューにLinearLayout配置された最長方向 (縦向きの場合は垂直、横向きの場合は水平) に重みを付けて2 つを使用できます。RelativeLayout

テーブルレイアウトを使用する

別のオプション。stretchColumns幅にはオプションを使用し、高さweightにはを使用します。TableRows

デバイスの向きに応じて、3x4 または 4x3 グリッドを使用したいと考えています。これを実装する最適な方法は何ですか?

最適な方法はありません。上記のソリューションのいずれかを使用でき ます。独自のレイアウトを作成することもできます。

于 2013-03-23T17:27:33.130 に答える