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。请参阅此比较(我没有更改任何布局中的任何内容):
我注意到如果我没有为视图设置任何内容(onClickListeners、适配器等),我的布局会正确显示。所以我开始制作尽可能简单的类,然后添加适当的行。我发现在我的情况下迫使这个空间的东西是微调器。两者都对项目使用完全相同的数组。我注意到选择的项目越长,占用的额外空间就越多。似乎有些机制可以防止跨越屏幕边界,因为右微调器会更多地影响对话。左边必须像 7-8 个字符才能更改对话框的大小
我尝试了什么:
- 将布局和行显式设置为 wrap_content
- 使用线性布局作为 TableLayout 和 TableRow
- 为 TableLayout 设置 layout_height = "fill_parent" - 我在 wrap_content 上读到的东西搞砸了,但在这种情况下不是
- 添加各种视图并观察,空格量如何变化,我没有看到公式
- 简化代码