如何';重量';让元素填充Android布局中的可用空间?

如何';重量';让元素填充Android布局中的可用空间?,android,android-layout,listview,Android,Android Layout,Listview,这是我第一次尝试Android应用程序。请原谅所有的无知和愚蠢 如果为所有元素指定一个属性值,我就知道了权重是如何工作的。那么权重如何使列表视图填充线性布局中两个元素之间的所有可用空间,而它是唯一具有权重的元素 我有一个简单的布局,在顶部有一个列表视图,在屏幕底部有一个编辑文本,“按钮,和文本视图。只有ListView和TextView具有weight`属性(许多属性,如边距等,为了简洁起见,只省略了默认属性的元素): 现在,这如何使ListView填满屏幕上的可用空间?我本以为height

这是我第一次尝试Android应用程序。请原谅所有的无知和愚蠢

如果为所有元素指定一个属性值,我就知道了权重是如何工作的。那么
权重
如何使
列表视图
填充
线性布局
中两个元素之间的所有可用空间,而它是唯一具有权重的元素

我有一个简单的布局,在顶部有一个
列表视图
,在屏幕底部有一个
编辑文本
,“按钮
,和
文本视图
。只有
ListView
TextView
具有
weight`属性(许多属性,如边距等,为了简洁起见,只省略了默认属性的元素):



现在,这如何使
ListView
填满屏幕上的可用空间?我本以为
height=*
或者类似的东西就可以了。“0.43”+“7.99”与
weightsome=“10”
的距离不是很近,这只会增加我的困惑。

使用android:layout\u width=“match\u parent”而不是fill\u parent。 这将填满屏幕的所有宽度空间。
在最新版本的android中,填充父项不再使用

与android:layout\u width=“match\u parent”一起使用,而不是填充父项。 这将填满屏幕的所有宽度空间。
在上一版本的android中,不再使用填充父对象

在本例中,您不需要使用
weightSum
<如果希望视图只占用部分可用空间而不是全部可用空间,则代码>权重总和
更有用。如果从
result\u text
中删除权重,并从
LinearLayout
中删除
weightSum
,则它将按预期工作。您还可以将
文件列表
布局权重
设置为更好的数字,如
1

从:

定义最大权重和。如果未指定,则总和由以下公式计算: 添加所有子项的布局权重。这可以用于 实例为单个子对象提供总可用空间的50% 将布局_权重设置为0.5,并将权重总和设置为1.0

必须是浮点值,如“1.2”

这应该做到:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:layout_centerHorizontal="true"
              android:orientation="vertical">

    <ListView
            android:id="@+id/files_list"
            android:background="@drawable/text_view_border"
            android:layout_height="0dp"
            android:layout_weight="1"
            ...
            android:soundEffectsEnabled="true" />

    <TextView
            android:id="@+id/result_text"
            ...
            android:layout_width="fill_parent"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_height="wrap_content"
            android:gravity="center" />
</LinearLayout>

在本例中不需要使用
weightSum
<如果希望视图只占用部分可用空间而不是全部可用空间,则代码>权重总和
更有用。如果从
result\u text
中删除权重,并从
LinearLayout
中删除
weightSum
,则它将按预期工作。您还可以将
文件列表
布局权重
设置为更好的数字,如
1

从:

定义最大权重和。如果未指定,则总和由以下公式计算: 添加所有子项的布局权重。这可以用于 实例为单个子对象提供总可用空间的50% 将布局_权重设置为0.5,并将权重总和设置为1.0

必须是浮点值,如“1.2”

这应该做到:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:layout_centerHorizontal="true"
              android:orientation="vertical">

    <ListView
            android:id="@+id/files_list"
            android:background="@drawable/text_view_border"
            android:layout_height="0dp"
            android:layout_weight="1"
            ...
            android:soundEffectsEnabled="true" />

    <TextView
            android:id="@+id/result_text"
            ...
            android:layout_width="fill_parent"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_height="wrap_content"
            android:gravity="center" />
</LinearLayout>


我不想填充屏幕宽度。我有
android:orientation=“vertical”
和屏幕底部的元素,我希望
ListView
填充屏幕顶部和最顶部底部元素之间的剩余空间。我不想填充屏幕宽度。我有
android:orientation=“vertical”
并且在屏幕底部有元素,我希望
ListView
填充屏幕顶部和最顶部底部元素之间的剩余空间。谢谢,我会尝试你的例子,但这个问题背后的原因是“为什么
权重
可以做到这一点”,而不是,“当语义上有点混乱时,
weight
,还有什么替代方法呢?答案是,这不是weight的目的。您希望
列表视图
占用所有可用空间,因此不需要权重。这不是重量的替代品;权重是错误的解决方案。我的应用程序在Nexus模拟器和我的手机上使用了错误的解决方案。我在这里复制了体重示例的答案,突然我的应用程序开始工作了。是什么让LisrView占用了所有剩余的空间?是否只是因为它有一个溢出,无法覆盖其他控件,所以如果它只有一个元素,它不会填充所有空间?空间
ListView
占用遵循与其他视图相同的规则。如果您使用不受鼓励的
wrap\u content
,它只会随着孩子的成长而成长。如果它只有一个孩子,并且它的高度设置为
match\u parent
或0 height+weight,那么
列表视图将占用所有空间,而孩子将只占用
列表视图中所需的空间(正如您所期望的那样)。谢谢您的解释,James。谢谢,我将尝试您的示例,但这个问题背后的原因是“为什么重量能起到这个作用”,而不是,“当语义上有点混乱时,
weight
,还有什么替代方法呢?答案是,这不是weight的目的。您希望
列表视图
占用所有可用空间,因此不需要权重。这不是重量的替代品;权重是错误的解决方案。我的应用程序在Nexus模拟器和我的手机上使用了错误的解决方案。我在这里复制了体重示例的答案,突然我的应用程序开始工作了。是什么让LisrView占用了所有剩余的空间?是否只是因为它有一个溢出,无法覆盖其他控件,所以如果它只有一个元素,它不会填充所有空间?空间
ListView
占用遵循与其他视图相同的规则。它只会和它的孩子一起成长,如果你