如何使视图填充可用空间?

时间:2011-07-19 09:13:57

标签: android layout

我知道这一定是一个简单的问题......我只是不知道如何解决它。

所以(只是一个例子),

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:orientation="vertical">
    <Button     android:id="@+id/fakeButton"
                android:layout_height="match_parent"
                android:layout_width="match_parent"/>
    <Button     android:id="@+id/saveSearch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/saveSearch"/>
</LinearLayout>

这不起作用 - 第一个按钮会使第二个不可见。权重将使它成为一个百分比游戏,这不是我想要的。

我厚吗?

编辑:我不知道,但看起来顺序很重要(来自答案)。加载布局是迭代的而不是整体的。您可以将第一个元素设置为固定高度,其余元素将填充剩余的元素。但我需要的是使最终元素成为固定的高度。

5 个答案:

答案 0 :(得分:11)

您可以完全使用layout_weight:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:orientation="vertical">
    <Button     android:id="@+id/fakeButton"
                android:layout_height="1"
                android:layout_width="match_parent"
                android:layout_weight="1.0" />
    <Button     android:id="@+id/saveSearch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/saveSearch"/>
</LinearLayout>

有了这个,你就会让底部按钮具有基本高度,而fakeButton会占用所有剩余的空间。

layout_height控制如何在不同视图之间拆分剩余空间。默认值为0(不占用任何额外空间)。如果你把两个按钮放在相同的高度和1.0的重量,那么每个按钮将占用50%的空间。

答案 1 :(得分:2)

我想你想让fakeButton填补剩下的空间,对吧?您可以使用android:layout_weight执行此操作。这是一个例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:orientation="vertical">
<Button     android:id="@+id/fakeButton"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"/>
<Button     android:id="@+id/saveSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/saveSearch"/>
</LinearLayout>

答案 2 :(得分:2)

另一种非常简单的解决方案。只需使用FrameLayout和margin属性:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button     android:id="@+id/fakeButton"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent"
                android:text="Fake button"
                android:layout_marginBottom="50dip" />

    <Button     android:id="@+id/saveSearch"
                android:layout_gravity="bottom"
                android:layout_width="fill_parent"
                android:layout_height="50dip"
                android:text="Save search"/>
</FrameLayout>

答案 3 :(得分:0)

我觉得它对你有所帮助..

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="center"
android:background="@drawable/bg"
 >

 <Button
 android:id="@+id/button"
 android:layout_width="wrap_content"
 android:layout_height="60dip"
 android:text="button"

/>
<Button
 android:id="@+id/button1"
 android:layout_width="wrap_content"
 android:layout_height="fill_parent"
 android:layout_weight="1"
 android:layout_below="@+id/button"
 android:text="button1"

/>


</RelativeLayout>

答案 4 :(得分:-1)

应该是另一种方式..
首先你应该有固定元素,然后是match_parent或fill_parent