代码之家  ›  专栏  ›  技术社区  ›  Tom

Android:简单的线性布局和填充父问题

  •  6
  • Tom  · 技术社区  · 15 年前

    我肯定我错过了一些简单的东西…

    背景:

    我对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" ,的 复选框 占据整个屏幕并与中心对齐(即 TextView 消失)。

    • 场景2)如果我 相反 设置 文本框 布局高度 “填充父母” , the 复选框 不是 消失。事实上,没有任何内容消失,布局看起来与上面的XML相同,所有内容都被推到左上角。

    问题(和评论):

    场景1是如何工作的?

    这种行为在我看来不一致。我想 fill_parent 只允许元素填充父元素中可用的空间。所以在我看来 文本框 应该有足够的空间 需要 (既然是 wrap_content )但是 复选框 应该占据剩余的空间(所以 文本框 将被强制到屏幕底部,但不可见)。换句话说…场景2对我来说很有意义,但场景1没有。

    请解释:—)。

    谢谢,

    汤姆

    1 回复  |  直到 15 年前
        1
  •  13
  •   Carl Manaster    15 年前

    LinearLayout 一步一步地测量IT儿童,因此在第一个示例中 它看到第一个孩子想要有所有可用的高度,它给它。 在第二个示例中,它为第二个孩子提供了所有可用的位置。 如果希望复选框占据除文本框所需位置以外的所有位置,则应更改 布局\复选框高度到 wrap_parent 并设置 layout_weight 每个子级的属性,布局权重指示可用位置的数量 之后 所有被测的儿童都应该加入到每个儿童中。更具体地说,它的工作方式是分步骤进行的:
    1)LinearLayout的父级告诉线性布局它可以有多大
    2)LinearLayout按指定的布局参数顺序询问所有IT子级,并分配可用空间。
    3)如果任何可用空间仍然可用,它将根据子对象的权重在子对象之间进行分配(布局权重在0和1之间,0-默认情况下)
    希望它有帮助
    编辑:
    我检查过了 线性布局 源代码并找出如果线性布局 FILL_PARENT 布局参数和非零重量测量代码将布局高度设置为 WRAP_CONTENT 然后根据体重在所有儿童之间分配空间。