xml - android: 简单的 LinearLayout 和 fill_parent 问题

标签 xml android layout user-interface

我确信我遗漏了一些简单的东西......

背景:

我是 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) 当我将 CheckBoxlayout_height 设置为 "fill_parent" 时,CheckBox 占据整个屏幕并居中对齐(即 - TextView 消失)。

  • 场景 2) 如果我改为TextViewlayout_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/

相关文章:

xml - Postgres 中的 OPENXML

javascript - Extjs 将 xml 文件属性加载到存储中

android - 我想创建一个看起来像 toast 的标签

java - 如何消除Android Root View 中的模糊

android - Android中如何同时使用HTTPS和HTTP解析JSON数据?

java - Galaxy Note 布局问题

android - 我如何从另一个屏幕调用 webview

android - 具有自定义粗细的虚线分隔符

java - 如何使用 XML Modifier 保存不断更新并最终将输出保存为文件

php - 动态 DIV 布局?