Windows 7、Android Studio 1.1.0、コンパイル済み SDK 21、Samsung Galaxy Core (SDK 14)。
ダイアログ ボックスとして入力するフィールドがほとんどないフォームを設計していますが、取り除くことができない空白スペースがたくさんあります。TableLayout を使用して配置します。xml コードで無関係なフィールドをスキップしましたが、レイアウト関連のフィールドはすべてそこにあります。
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="@dimen/margin_small"
android:background="@color/HellTeal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TableRow>
<TextView/>
<EditText/>
</TableRow>
<TableRow>
<TextView/>
<Spinner
android:layout_width="0dp"
android:layout_weight="1"/>
<Spinner
android:layout_width="0dp"
android:layout_weight="1"/>
</TableRow>
<TableRow>
<TextView/>
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<Button
android:layout_width="0dp"
android:layout_weight="1"/>
<Button
android:layout_width="0dp"
android:layout_weight="1"/>
</TableRow>
</TableLayout>
プレビューではすべて問題ないように見えました (この色で申し訳ありませんが、使用されたスペースを表示するように設定されています)。
残念ながら実物は違うようです。これをダイアログ レイアウトとして使用すると、本来よりも多くのスペースが必要になります。ダイアログを作成するコードは最大限に単純化されているため、奇妙な宣言ではありません。AlertDialog と DialogFragment にそれぞれこのレイアウトの画面があります。2 番目のケースでは、追加のスペースがどのように色付けされているかに注目してください。
追加スペースの量は、どういうわけかコンテンツに依存することに気付きました。0 に等しくなる可能性さえあります。この比較を参照してください (どちらのレイアウトでも何も変更していません)。
ビュー (onClickListeners、アダプターなど) に何も設定しないと、レイアウトが正しく表示されることに気付きました。そこで、できるだけ単純なクラスを作成し、適切な行を追加し始めました。私の場合、このスペースを強制しているのはスピナーであることがわかりました。どちらもアイテムにまったく同じ配列を使用します。選択したアイテムが長いほど、より多くのスペースが取られることに気付きました。右のスピナーがダイアログに影響を与えるため、画面の境界を越えるのを防ぐ何らかのメカニズムのようです。ダイアログのサイズを変更するには、左が 7 ~ 8 文字である必要があります
私が試したこと:
- 明示的にレイアウトと行を wrap_content に設定する
- 線形レイアウトを TableLayout および TableRow として使用する
- TableLayout に layout_height = "fill_parent" を設定する - wrap_content を読んで混乱しますが、この場合はそうではありません
- 様々なビューを追加して観察すると、余白の量がどのように変化するか、数式がわかりません
- コードの簡素化