0

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 に等しくなる可能性さえあります。この比較を参照してください (どちらのレイアウトでも何も変更していません)。

比較1

ビュー (onClickListeners、アダプターなど) に何も設定しないと、レイアウトが正しく表示されることに気付きました。そこで、できるだけ単純なクラスを作成し、適切な行を追加し始めました。私の場合、このスペースを強制しているのはスピナーであることがわかりました。どちらもアイテムにまったく同じ配列を使用します。選択したアイテムが長いほど、より多くのスペースが取られることに気付きました。右のスピナーがダイアログに影響を与えるため、画面の境界を越えるのを防ぐ何らかのメカニズムのようです。ダイアログのサイズを変更するには、左が 7 ~ 8 文字である必要があります

比較2

私が試したこと:

  • 明示的にレイアウトと行を wrap_content に設定する
  • 線形レイアウトを TableLayout および TableRow として使用する
  • TableLayout に layout_height = "fill_parent" を設定する - wrap_content を読んで混乱しますが、この場合はそうではありません
  • 様々なビューを追加して観察すると、余白の量がどのように変化するか、数式がわかりません
  • コードの簡素化
4

1 に答える 1