0

カラーピッカーを立ち上げる状況があります。ポートレートモードでやれば大丈夫です。しかし、横向きモード (ダイアログが画面に収まらない) で行うと、レイアウトを膨らませようとすると爆発するようです。

ビューが画面全体に収まらないランドスケープ モードでこれを行う特別な方法はありますか?

画面の面積以外に考慮する必要がある違いはありますか?

4

1 に答える 1

1

クレイガ、

あなたのコメントを読んだ後、XML でさまざまな幅と高さが生成される方法について誤解があるようです。これは、最初はよくある誤解です。したがって、ここで理解しておくべきことは、さまざまなオブジェクトの幅は動的ではありますが、オブジェクトにさまざまな動作を課すということです。

通常、layout_width/layout_height

幅と高さのパラメーターは、オブジェクトの実際の幅と高さに影響しません。これらは、表示の幅と高さに影響します。これは、幅と高さをコンテンツよりも小さく設定できることを意味し、コンテンツがコンテナーよりも大きい場合でも、スクロール時にコンテンツにアクセスできます。

多くの子ビューは親ビューからヒントを得ているため、上記のような動作になる可能性があります。ここでの秘訣は、まず何が起こっているのかを理解し、次にシステムの動作を補正することです。

match_parent/fill_parent

通常、これは現在のビューが親からそのサイズを取得することを意味します。ビューが最上位のビューである場合、動作はわずかに異なります。これがたまたまダイアログのトップレベルのビューである場合、それは画面のサイズまたはコンテンツのサイズ (どちらか小さい方) になります。ビューがアクティビティの最上位のビューである場合、結果は同じですが、見た目が異なります。つまり、アクティビティの完全な不透明度と背景を持ちますが、ビューのサイズはコンテンツのサイズまたは画面のサイズ (どちらか小さい方) のみです。子の幅/高さがこのビューの幅/高さに基づいていない限り、子のサイズは影響を受けません。

wrap_content

この場合、表示の高さは、直下のすべての子の表示の高さに基づいています。この動作は、階層が 以外のものを使用するまで、「最も若い」子孫にカスケードしますwrap_content

あなたの問題(現在表示されているもの)

最上位ビューは wrap_content を使用するため、表示サイズはすべての子の表示サイズに基づきます。この場合、match_parent' or最上位ビューのみに fill_parent` (API によって異なります) を使用することをお勧めします。これにより、コンテンツではないにしても、少なくともダイアログが適切なサイズになります。サイズが最上位ビューに基づくコントロールの場合、それらは一列に並びます。そうでないものは、手動で調整する必要があります。

さて、ここで下さなければならない決定は実装です。すべてのディスプレイのサイズを調整する必要がありますか、それともランドスケープだけですか。変更がポートレート表示に影響しない場合は、1 つのファイルで問題ありません。そうでない場合は、縦向き (現在のもの) のレイアウト ファイルが必要になり、次に横向きモード用に調整されたファイルが必要になります。

2 つのファイルを使用している場合はlayout_port、現在のファイルを保存する名前のフォルダーが作成されます。layout_land調整済みの名前の付いたフォルダーを追加します。それらは同じ名前になり、別々のフォルダーに格納されます。

お役に立てれば、

ファジカルロジック

于 2012-01-14T23:05:04.387 に答える