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 中分别有具有这种布局的屏幕。请注意,在第二种情况下,额外的空间是如何着色的,很奇怪。

在对话框中

我注意到额外空间的数量在某种程度上取决于内容。它甚至可能等于 0。请参阅此比较(我没有更改任何布局中的任何内容):

比较1

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

比较2

我尝试了什么:

  • 将布局和行显式设置为 wrap_content
  • 使用线性布局作为 TableLayout 和 TableRow
  • 为 TableLayout 设置 layout_height = "fill_parent" - 我在 wrap_content 上读到的东西搞砸了,但在这种情况下不是
  • 添加各种视图并观察,空格量如何变化,我没有看到公式
  • 简化代码
4

1 回答 1

1

似乎您在表格布局中拥有所需的一切,甚至是确定和取消按钮。我建议您使用 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();
于 2015-05-17T13:53:11.573 回答