44

我希望三个按钮在水平方向上占据相同数量的可用空间。我用过android:layout_gravity。问题是什么?

布局xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1.0"
    >

    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Bg"
            android:background="@drawable/button_red"
            android:layout_weight=".2"
            android:layout_gravity="left"
    />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Bm"
            android:background="@drawable/button_red"
            android:layout_weight=".2"
            android:textColor="#ffffff"
            android:layout_gravity="center"
    />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_red"
        android:layout_weight=".2"
        android:text="@string/Bf"
        android:layout_gravity="right"
    />

</LinearLayout>

如果有人看到出了什么问题,谢谢。

4

9 回答 9

120

以下布局应该可以工作。权重用于线性布局..

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3"
>

    <Button android:id="@+id/button1"
            ...
            android:layout_weight="1"/>

    <Button android:id="@+id/button2"
            ...
            android:layout_weight="1"/>

    <Button
        android:id="@+id/button3"
        ...
        android:layout_weight="1"/>

</LinearLayout>
于 2012-07-26T12:32:35.470 回答
14

除了设置 alayout_weight你必须设置layout_widthor layout_heightto 0dp。因此,例如,如果您想水平分布按钮,layout_width应该是 0dp 和layout_weight.2 或任何数字,只要通过您拥有的按钮相等即可。

所以你的布局应该是这样的

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>

<Button android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/Bg"
        android:background="@drawable/button_red"
        android:layout_weight="1"
/>
<Button android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/Bm"
        android:background="@drawable/button_red"
        android:layout_weight="1"
        android:textColor="#ffffff"
/>

<Button
    android:id="@+id/button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@drawable/button_red"
    android:layout_weight="1"
    android:text="@string/Bf"
/>
</LinearLayout>
于 2013-03-07T15:09:27.820 回答
2

在所有按钮中将重量总和除以相等的比例。

移除 layout_gravity 属性并添加 android:layout_weight=0.33。

它会工作

于 2012-07-26T12:24:22.123 回答
1

看看这个:

<RelativeLayout 
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <Button 
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"/>
    <RelativeLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true">
        <Button 
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/button1"/>
    </RelativeLayout>
    <Button 
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"/>
</RelativeLayout>
于 2012-07-26T12:18:17.100 回答
1

android:layout_weight="1"每个按钮

这里是Android开发者指南:

布局重量

LinearLayout 还支持使用 android:layout_weight 属性为单个子级分配权重。这个属性根据它应该在屏幕上占据多少空间来为视图分配一个“重要性”值。较大的权重值允许它扩展以填充父视图中的任何剩余空间。子视图可以指定一个权重值,然后将视图组中的任何剩余空间按照其声明权重的比例分配给子视图。默认权重为零。

例如,如果有三个文本域,其中两个声明权重为 1,而另一个没有权重,则没有权重的第三个文本域不会增长,只会占用其内容所需的区域。在测量所有三个字段后,另外两个将平均扩展以填充剩余的空间。如果第三个字段的权重为 2(而不是 0),那么它现在被声明为比其他两个更重要,因此它获得总剩余空间的一半,而前两个平分其余空间。

来源

于 2018-03-24T02:57:18.007 回答
0

将按钮放在相对布局中。将属性添加到按钮 allignParentleft = true、另一个 allignParentcenter= true 和 allignParentRight = true 到每个按钮。

于 2012-07-26T12:16:49.110 回答
0

请考虑以下布局片段:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="3">

    <ImageView
        android:src="@drawable/logo1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="left|center_vertical" />

    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Some Title"
        android:textColor="@android:color/black"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_weight="1" />

    <ImageView
        android:src="@drawable/logo2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="right|center_vertical" />

</LinearLayout>

上面要注意的2点。

A. 我创建了一个 weightSum 为 3 的 LinearLayout。

B. 然后在其中创建 3 个元素,每个元素的 layout_weight 为 1,这样我的子元素就可以在它们之间均匀分布整个空间。

于 2017-06-07T07:19:38.617 回答
0

我已经做到了务实而没有重量

 float width = CommonUtills.getScreenWidth(activity);
    int cardWidth = (int) CommonUtills.convertDpToPixel(((width) / 3), activity);

    LinearLayout.LayoutParams params =
        new LinearLayout.LayoutParams(cardWidth,
            LinearLayout.LayoutParams.MATCH_PARENT);

    btnOne.setLayoutParams(params);
    btnTwo.setLayoutParams(params);
    btnThree.setLayoutParams(params);

    public class CommonUtills {
        public static float getScreenWidth(Context context) {
            float width = (float) 360.0;
            DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
            width = displayMetrics.widthPixels / displayMetrics.density;
            return width;
        }
    }



    <LinearLayout
    android: layout_width = "match_parent"
    android: layout_height = "50dp"    
    android: orientation = "horizontal" >


        <Button
    android: id = "@+id/btnOne"
    android: layout_width = "wrap_content"
    android: layout_height = "match_parent" > </Button>


        <Button
    android: id = "@+id/btnTwo"
    android: layout_width = "wrap_content"
    android: layout_height = "wrap_content" > </Button>



        <Button
    android: id = "@+id/btnThree"
    android: layout_width = "wrap_content"
    android: layout_height = "wrap_content" > </Button> 
        </LinearLayout>
于 2017-08-26T10:24:20.850 回答
-1

你可以这样划分:`

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_toLeftOf="@+id/imageButtonLikedPost">

                <ImageButton
                    android:id="@+id/imageButtonMyPost"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/mypost_tab_bg" />
            </RelativeLayout>

            <ImageButton
                android:id="@+id/imageButtonLikedPost"
                android:layout_width="40dp"
                android:layout_height="30dp"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:background="@drawable/mylike_tab_bg" />

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/imageButtonLikedPost">

                <ImageButton
                    android:id="@+id/imageButtonMyBlog"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/tab4_bg" />
            </RelativeLayout>
        </RelativeLayout>`
于 2016-10-05T00:25:43.680 回答