Android对话框占用太多空间

时间:2015-05-16 18:12:49

标签: android layout android-tablelayout row-height

Windows 7,Android Studio 1.1.0,编译SDK 21,三星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>

预览时一切都很好(抱歉这个颜色,它设置为显示空间)。

Preview

不幸的是,它在现实中看起来不同。当我将它用作对话框布局时,这会占用更多空间。代码创建最大限度简化的对话框,因此它不是一些奇怪的声明。 AlertDialog和DialogFragment中分别有这种布局的屏幕。请注意,第二种情况下额外空间的颜色是多少,很奇怪。

in Dialog

我注意到额外空间的数量在某种程度上取决于内容。它甚至可以等于0.看看这个比较(我没有改变任何一个布局):

Comprarison1

如果我没有为视图设置任何内容(onClickListeners,适配器等),我注意到我的布局正确显示。所以我开始制作尽可能简单的类,然后添加适当的行。我发现在我的情况下迫使这个空间的东西是旋转器。两者对项目使用完全相同的数组。我注意到所选项目越长,所采取的空间就越大。似乎可能是一些阻止跨越屏幕边框的机制,因为右侧微调器会更多地影响对话框。左边必须像7-8个字符才能改变对话框的大小

Comparison2

我尝试了什么:

  • 将布局和行显式设置为wrap_content
  • 使用线性布局作为TableLayout和TableRow
  • 设置layout_height =&#34; fill_parent&#34;对于TableLayout - 我读过wrap_content会让事情变得混乱,但不是在这种情况下
  • 添加各种视图和观察,空白量的变化情况,我看不到公式
  • 简化代码

1 个答案:

答案 0 :(得分:1)

似乎你在表格布局中拥有所需的一切,甚至是ok和cancel按钮。我建议你使用AlertDialog。但是,不要在构建器中设置按钮和标题。创建警报后也设置视图。请尝试以下代码

AlertDialog.Builder builder = new AlertDialog.Builder(this);
//you won't need yes no buttons because it is already containing in your layout
View view = getLayoutInflater().inflate(R.layout.aaa_test, null);
AlertDialog aler=builder.create();
alert.setView(view,0,0,0,0);
alert.show();