我确定我错过了一些简单的东西……
背景:
我是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不会消失.事实上,没有什么消失,并且布局看起来与上面的xml相同,其中所有内容都被推到左上角.
问题(及评论):
方案1的工作方式如何?
这种行为似乎与我不一致.我认为fill_parent只能让元素填满父级中可用的空间.所以对我来说,似乎TextView应该得到它需要的任何空间(因为它是wrap_content),但CheckBox应该占用剩下的空间(因此TextView将被强制到屏幕的底部,但不是看不见的).换句话说……场景2对我有意义,但场景1没有.
请解释 :-).
谢谢,
汤姆
LinearLayout逐个测量它作为一个步骤,所以在你的第一个例子中 它看到第一个孩子想要拥有所有可用的高度. 在您的第二个示例中,它为第二个孩子提供了所有可用的位置. 如果您希望复选框占据文本框所需的所有位置,则应更改 layout_height的复选框为wrap_parent并设置每个子项的layout_weight属性,布局权重表示在测量所有子项后应将多少可用位置添加到每个子项中.更具体地说,它按步骤工作的方式: 1)LinearLayout的父级告诉线性布局它有多大 2)LinearLayout要求所有孩子按顺序指定他们的布局参数并分配可用空间. 3)如果任何可用空间仍然可用,它会根据它们的重量在子节点之间分配它(布局权重介于0和1,0之间 – 默认情况下) 希望能帮助到你 编辑: 我检查过LinearLayout源代码并发现如果线性布局有一个FILL_PARENT布局参数而不是零重量测量代码会将布局高度设置为WRAP_CONTENT,然后根据权重在所有子节点之间分配空间.