按钮填充垂直空间

时间:2013-07-26 01:06:28

标签: android android-layout android-layout-weight

有人告诉我,我可以使用第二种线性布局,使我的按钮伸展以垂直填充剩余的空白区域。我不知道从哪里开始。任何帮助将不胜感激。

<?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:gravity="center"
    android:orientation="vertical" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="horizontal" >
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center">
    <TableRow>
        <Button
            android:id="@+id/one"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="fill_vertical"
            android:layout_weight="1"
            android:gravity="center"
            android:text="1" />
        <Button
            android:id="@+id/two"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="2" />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/three"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="fill_vertical"
            android:layout_weight="1"
            android:gravity="center"
            android:text="3" />
        <Button
            android:id="@+id/four"
            android:text="4"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:layout_weight="1" />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/five"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="5" />
        <Button
            android:id="@+id/six"
            android:text="6"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:layout_weight="1" />
    </TableRow>
</TableLayout>
</LinearLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找的功能是android:weightSum。 这是官方参考: http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:weightSum

因此,要将表格布局扩展为全屏,您需要为TableLayout指定weightSum为3,并将android:layout_weight除以1分配给每个TableRow。这将给你想要的结果。

所以你的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:gravity="center"
    android:orientation="vertical" >
<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="horizontal" >
<TableLayout

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="3"
    android:gravity="center">
    <TableRow
        android:layout_weight="1">
        <Button
            android:id="@+id/one"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="fill_vertical"
            android:layout_weight="1"
            android:gravity="center"
            android:text="1" />
        <Button
            android:id="@+id/two"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="2" />
</TableRow>
<TableRow
    android:layout_weight="1">
    <Button
        android:id="@+id/three"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="fill_vertical"
        android:layout_weight="1"
        android:gravity="center"
        android:text="3" />
    <Button
        android:id="@+id/four"
        android:text="4"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:layout_weight="1" />
</TableRow>
<TableRow
    android:layout_weight="1">
    <Button
        android:id="@+id/five"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="5" />
    <Button
        android:id="@+id/six"
        android:text="6"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:layout_weight="1" />
</TableRow>
</TableLayout>
</LinearLayout>
</LinearLayout>

答案 1 :(得分:2)

我假设您希望按钮填满屏幕上的可用高度。在这种情况下,请在这里查看答案Android TableLayout height does not fills the whole screen

<?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:gravity="center"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center" >

        <TableRow
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/one"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="1" />

            <Button
                android:id="@+id/two"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="2" />
        </TableRow>

        <TableRow
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/three"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="3" />

            <Button
                android:id="@+id/four"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="4" />
        </TableRow>

        <TableRow
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/five"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="5" />

            <Button
                android:id="@+id/six"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="6" />
        </TableRow>
    </TableLayout>

</LinearLayout>

请注意,表行现在有

 android:layout_height="0dp"
 android:layout_weight="1"

这将允许行展开以填充剩余空间(每行占屏幕高度的1/3)。

我还将按钮布局宽度更改为0dp,因为您正在使用重量。此外,您不需要xmlns:android="http://schemas.android.com/apk/res/android" 3次。您只需要父布局。

最后,因为许多按钮都使用相同的样式。我建议你看一下可能使用这些按钮的样式。您可以在http://developer.android.com/guide/topics/ui/themes.html了解有关样式/主题的更多信息。