我确信我遗漏了一些简单的东西......
背景:
我是 Android 和 UI 设计的新手,我只是想尝试一下布局。现在我想在文本标签上堆叠一个复选框。我正在使用以下 xml 布局,工作正常:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<CheckBox android:id="@+id/check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_box_text" />
<TextView android:id="@+id/dummy_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dummy_label" />
</LinearLayout>
我的测试(只是为了了解它是如何工作的):
场景 1) 当我将
CheckBox
的layout_height
设置为"fill_parent"
时,CheckBox
占据整个屏幕并居中对齐(即 -TextView
消失)。场景 2) 如果我改为将
TextView
的layout_height
设置为"fill_parent"
,CheckBox
确实NOT 消失。事实上,什么都没有消失,布局看起来与上面的 xml 一样,所有内容都被推到左上角。
问题(和评论):
为什么场景 1 会这样运作?
这种行为对我来说似乎不一致。我认为 fill_parent
只是应该让元素填充父级中可用的任何空间。所以对我来说,TextView
似乎应该得到它需要 的任何空间(因为它是 wrap_content
),但是 CheckBox
应该占据剩余的空间(因此 TextView
将被强制到屏幕底部,但不是不可见的)。换句话说......场景 2 对我来说有意义,但场景 1 没有。
请解释:-).
谢谢,
汤姆
最佳答案
LinearLayout
将它作为一个单独的步骤一步一步地测量它,所以在你的第一个例子中
它看到第一个 child 想要拥有它给它的所有可用高度。
在您的第二个示例中,它为第二个 child 提供了所有可用的位置。
如果您希望复选框占据除文本框所需位置之外的所有位置,您应该更改
checkbox 的layout_height 为wrap_parent
并设置每个child 的layout_weight
属性,layout weight 表示在所有child 被测量后应该添加多少可用位置给他们每个人。更具体地说,它是按步骤工作的:
1) LinearLayout 的Parent 告诉线性布局它可以有多大
2) LinearLayout 询问所有它的 child ,以便他们指定他们的布局参数并分配可用空间。
3)如果仍有可用空间,它会根据 child 的体重(布局体重在 0 和 1 之间,0 - 默认情况下)在 child 之间分配它
希望对你有帮助
编辑:
我检查了 LinearLayout
源代码,发现如果线性布局有 FILL_PARENT
布局参数而不是零权重测量代码会将布局高度设置为 WRAP_CONTENT
然后根据权重在所有 child 之间分配空间。
关于xml - android: 简单的 LinearLayout 和 fill_parent 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958388/