XML布局中相对于父级大小的按钮大小?

时间:2011-05-05 14:38:04

标签: android android-layout

是否可以在XML布局文件中设置按钮的大小,以便一方面不占用父级(屏幕)的整个宽度,并且另一方面,不使用绝对像素值?

为了更好地解释我的问题,以下代码段中的问题是"match_parent"占据整个宽度:

<Button android:id="@+id/btn_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="16px"
    android:paddingLeft="16px"
    android:paddingRight="16px"
    android:paddingTop="16px"
    android:text="@string/first_button" />

我知道可以控制大小during runtime,但我很想知道这是否也可以在XML文件中使用。

有类似android:layout_width="match_HALF_parent"的内容吗?

3 个答案:

答案 0 :(得分:6)

布局权重可以做到这一点。基本上你需要做的是在父布局中设置weightSum,然后在子设置中设置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:weightSum="2" android:orientation="horizontal">
    <Button android:id="@+id/btn_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingBottom="16px"
        android:paddingLeft="16px"
        android:paddingRight="16px"
        android:paddingTop="16px"
        android:text="@string/first_button" />
</LinearLayout>

父母的weightSum和孩子的体重之间的关系决定了孩子的宽度:在这种情况下,它将是一半;如果我们要将父母的体重总和增加到3,那么孩子将是其父母宽度的三分之一。

我在blog上写过这篇文章。

答案 1 :(得分:2)

原始示例可能是这样的:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <Button
        android:text="Button"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="100dp"
        android:layout_marginTop="100dp"
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
    ></Button>
</LinearLayout>

或者,您可以将android:padding设置为布局,而不是将边距设置为按钮。

答案 2 :(得分:0)

解决方案是嵌套严重的 LinearLayouts 。 使用一个垂直LinearLayout作为容器并在其上堆叠水平LinerarLayouts。每个水平带有一个重量:

android:layout_weight="0.5"

您还应确保将宽度和高度设置如下:

android:layout_width="match_parent"
android:layout_height="match_parent"

最后,你用小部件(例如按钮)填充这些水平布局,并给它们一个重量。

源可能看起来像以下代码段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@drawable/bg"
tools:context=".MainActivity">

<!--parent container-->
<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <!--child container-->
    <!--each horizontal layout gets 1/3 of remaining space-->
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_weight="0.5"
            android:layout_height="match_parent">

        <Button
                android:background="@color/colorPrimary"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="fill_parent" android:text="100%" android:textSize="60dp"/>
    </LinearLayout>
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_weight="0.5"
            android:layout_height="match_parent">
        <Button
                android:background="@color/colorPrimary"
                android:layout_width="fill_parent"
                android:layout_weight="0.5"
                android:layout_height="fill_parent" 
                android:text="50%" 
                android:textSize="60dp"/>
        <Button
                android:background="@color/colorPrimaryDark"
                android:layout_width="fill_parent"
                android:layout_weight="0.5"
                android:layout_height="fill_parent" 
                android:textSize="60dp" 
                android:text="50%"/>
    </LinearLayout>
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_weight="0.5"
            android:layout_height="match_parent">
        <Button
                android:background="@color/colorPrimary"
                android:layout_width="fill_parent"
                android:layout_weight="0.7"
                android:layout_height="fill_parent" android:text="30%" android:textSize="60dp"/>
        <Button
                android:background="@color/colorPrimaryDark"
                android:layout_width="fill_parent"
                android:layout_weight="0.3"
                android:layout_height="fill_parent" android:allowUndo="false" android:text="70%"
                android:textSize="60dp"/>
    </LinearLayout>

    <!-- Just for spacing-->
    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="20dp">
    </RelativeLayout>
</LinearLayout>


</LinearLayout>

为此得到结果:

LinearLayout Stack