29

我有三个单选按钮,我想将它们均匀地分布在屏幕上。当我使用android:layout_weight="1"时,按钮会在屏幕上展开。那么,如何在它们之间拥有相同数量的空间,并且可以在不同的屏幕尺寸上进行缩放?

<RadioGroup 
        android:id="@+id/auton_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="10dp"
        android:layout_below="@id/clear_fields"
                >
        <RadioButton
            android:id="@+id/auton_radio_1"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:background="@drawable/auton_col"
            android:layout_weight="1"

            />
        <!-- android:layout_marginRight="380dp"  --> 
        <RadioButton
            android:id="@+id/auton_radio_2"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:background="@drawable/auton_col"
            android:layout_weight="1"


            />
        <RadioButton
            android:id="@+id/auton_radio_3"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:background="@drawable/auton_col"
            android:layout_weight="1"
            />

    </RadioGroup>
4

3 回答 3

51

如果您希望它们平均共享屏幕宽度,则需要android:layout_width="match_parent"在每个View. 您的 xml 将变为:

<RadioGroup
    android:id="@+id/auton_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/clear_fields"
    android:orientation="horizontal"
    android:paddingLeft="10dp" >

    <RadioButton
        android:id="@+id/auton_radio_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/auton_col" />
    <!-- android:layout_marginRight="380dp" -->

    <RadioButton
        android:id="@+id/auton_radio_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/auton_col" />

    <RadioButton
        android:id="@+id/auton_radio_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/auton_col" />
</RadioGroup>

细说,layout_weight可以用两种方式。

  • 如果您在垂直线性布局中有多个视图,并且您希望最后一个占据所有剩余空间,您可以将它们的高度设置为wrap_content并将最后一个视图的权重设置为 1。
  • 如果您希望所有视图共享可用空间,请将所有宽度/高度设置为0dpormatch_parent并为每个视图赋予相同的权重值。他们将平等地共享空间。

要让您的背景可绘制比例,请在您的文件夹中创建一个新的 xml,drawable/如下所示

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center"
    android:src="@drawable/auton_col" />

将它命名为您喜欢的任何名称(例如 auton_col_scale.xml)并将该可绘制对象作为您的背景。

于 2013-03-15T23:06:41.453 回答
9

我注意到对 RadioButton 使用布局权重会导致它们偏离中心对齐,尽管它们确实每个共享 50% 的屏幕(它们是左对齐的)。为每个 RadioButton 设置重力只会导致文本居中 /facepalm

下面的 XML 显示了如何水平对齐两个单选按钮(可以是任何视图)并将它们居中:

                <RadioGroup
                    android:id="@+id/radiogroup"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <Space
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"/>

                    <RadioButton
                        android:id="@+id/radioyes"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/yes"
                        android:checked="false"/>

                    <Space
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"/>

                    <RadioButton
                        android:id="@+id/radiono"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/no"
                        android:checked="false"/>

                    <Space
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"/>

                </RadioGroup>
于 2017-12-05T23:45:00.233 回答
1

设置宽度以匹配每个布局的父级,然后像线性布局一样添加权重jsut。

<RadioGroup
            android:id="@+id/radio_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/bigMarginStart"
            android:layout_marginTop="@dimen/smallMarginTop"
            android:layout_marginEnd="@dimen/baseMarginEnd"
            android:orientation="horizontal"
            android:weightSum="3"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <RadioButton
                android:id="@+id/all_"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/smallMarginTop"
                android:layout_weight="1"
                android:background="@drawable/radio_flat_selector"
                android:button="@android:color/transparent"
                android:checked="true"
                android:gravity="center"
                android:paddingLeft="@dimen/bigPaddingStart"
                android:paddingTop="@dimen/smallPaddingTop"
                android:paddingRight="@dimen/bigPaddingStart"
                android:paddingBottom="@dimen/smallPaddingBottom"
                android:text="All" />

            <RadioButton
                android:id="@+id/future_"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="@dimen/smallMarginStart"
                android:layout_marginTop="@dimen/smallMarginTop"
                android:layout_marginEnd="@dimen/smallMarginEnd"
                android:layout_weight="1"
                android:background="@drawable/radio_flat_selector"
                android:button="@android:color/transparent"
                android:gravity="center"
                android:paddingLeft="@dimen/bigPaddingStart"
                android:paddingTop="@dimen/smallPaddingTop"
                android:paddingRight="@dimen/bigPaddingStart"
                android:paddingBottom="@dimen/smallPaddingBottom"
                android:text="Future" />

            <RadioButton
                android:id="@+id/direct_"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/smallMarginTop"
                android:layout_weight="1"
                android:background="@drawable/radio_flat_selector"
                android:button="@android:color/transparent"
                android:gravity="center"
                android:paddingLeft="@dimen/bigPaddingStart"
                android:paddingTop="@dimen/smallPaddingTop"
                android:paddingRight="@dimen/bigPaddingStart"
                android:paddingBottom="@dimen/smallPaddingBottom"
                android:text="Direct" />

        </RadioGroup>
于 2020-12-24T10:19:54.133 回答