2

(まず、下手な英語で申し訳ありません...)

タイトルとして、次のレイアウトが異なる画面に一致することを知っています。

res/layout/main_activity.xml  For handsets (smaller than 600dp available width)
res/layout-sw600dp/main_activity.xml For 7” tablets (600dp wide and bigger)
res/layout-sw720dp/main_activity.xml For 10” tablets (720dp wide and bigger)

私のアプリでは、ViewPagerAdapter を使用してコンテンツを管理しています。

電話デバイスの 3 つのページ フローを取得しました。

ここに画像の説明を入力

もちろん、ユーザーは同時に 1 ページしか見ることができません。

ここで、7 インチ タブレット用に少し異なるレイアウトを設定したいと思います。

ここに画像の説明を入力

WebView をレイアウトの左側に配置し、ViewPagerAdapter から分離して、常に表示されるようにしたいと思います。

また、レイアウトの右側にもう 2 ページ配置し、ViewPager (左右にスライド可能) として機能させます。

どちらのバージョンのレイアウトも同じコードを使用して管理しますが、ご覧のとおり、ページ フローは少し異なります。したがって、ターゲットをアーカイブするためにいくつかの変更を加える必要があります。

それは可能ですか?

4

1 に答える 1

0

最小限の労力でレイアウトを実装するには、ネストされたフラグメントを使用することをお勧めします。使用しているデバイスに関係なく、各 ViewPager パネルは「スマート」コンテナ Fragment によって処理されます。

「Android 開発者」のネストされたフラグメントの説明

コンテナ Fragment は、現在読み込まれているレイアウトに存在する Fragments/Views の ID をチェックし、必要に応じて Fragments を作成/アタッチすることにより、ビューの作成時にどのフラグメントを読み込む必要があるかのロジックを処理します。

たとえば、Android Phone の場合、最初のパネルのレイアウトにはおそらく R.id.title のみが含まれ、R.id.list 識別子は含まれません。コンテナ フラグメントは、findViewById(R.id.list) かどうかをチェックすることでこれを検出できます。 null であり、タイトル フラグメントのみを作成します (タブレットでは結果は null にはなりません)。

ご覧のとおり、正しいレイアウト ファイルは Android によって自動的に読み込まれるため、多くのロジックを実装する必要はありません :)

残っている唯一のタスクは、Activity の onCreate メソッドで行う画面 (電話/タブレット) のジオメトリに応じて、ViewPager によって表示されるページ数を変更することです。

デバイスの回転によってアプリの向きが変わると、この最後の手順が難しくなる可能性があることに注意してください。

それが役に立てば幸い

于 2013-05-27T17:27:38.540 に答える