如何将单选按钮居中对齐

6

我希望将下面图片中的单选按钮居中对齐。我已经使用了gravity但是不起作用。

enter image description here 我已经使用了以下代码:

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


                    <RadioButton
                        android:id="@+id/qty1"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:layout_gravity="center_vertical"
                        android:button="@drawable/radio_button_selector"
                        android:checked="false"
                        android:tag="1"/>


                    <RadioButton
                        android:id="@+id/qty2"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:padding="@dimen/s5dp"
                        android:button="@drawable/radio_button_selector"
                        android:tag="2"
                        />


                    <RadioButton
                        android:id="@+id/qty3"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:padding="@dimen/s5dp"
                        android:button="@drawable/radio_button_selector"
                        android:tag="3"
                        />


                    <RadioButton
                        android:id="@+id/qty4"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:padding="@dimen/s5dp"
                        android:button="@drawable/radio_button_selector"
                        android:tag="4"
                        />


                    <RadioButton
                        android:id="@+id/qty5"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:padding="@dimen/s5dp"
                        android:button="@drawable/radio_button_selector"
                        android:checked="false"
                        android:tag="5"/>


                </RadioGroup>

如果我在线性布局中添加单选按钮,它会居中对齐,但在这种情况下单选组的功能不起作用。
我希望单选按钮居中对齐,并具有单选组功能,即一次只能选择一个项目。

你使用的是线性布局还是相对布局? - Don't Be negative
这是翻译后的文本:这会有所帮助,请看一下https://dev59.com/E2kv5IYBdhLWcg3wpCMz - Parth Goswami
@Don'tBenegative - 它在线性布局内。 - Ragini
尝试使用相对布局重力等只在相对布局上起作用。 - Don't Be negative
@不要消极-相对布局也会产生相同的结果。 - Ragini
10个回答

12

我有一个解决这个问题的方法

    android:textSize="0.1sp"
    android:drawableTop="@drawable/selector_dashboard_button"
    android:button="@null"

替换了 android:background="" 部分的内容。

这是我的完整布局代码。

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal">

<RadioButton
    android:id="@+id/radioButton"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:checked="true"
    android:drawableTop="@drawable/selector_dashboard_button"
    android:padding="10dp"
    android:tag="1"
    android:textSize="0.1sp" />

<RadioButton
    android:id="@+id/radioButton2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:drawableTop="@drawable/selector_inventory_button"
    android:padding="10dp"
    android:textSize="0.1sp" />

<RadioButton
    android:id="@+id/radioButton3"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:drawableTop="@drawable/selector_check_list_button"
    android:padding="10dp"
    android:textSize="0.1sp" />

<RadioButton
    android:id="@+id/radioButton4"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:drawableTop="@drawable/selector_vendor_button"
    android:padding="10dp"
    android:textSize="0.1sp" />
</RadioGroup>

这是我的代码截图 在此输入图像描述


出色的。精彩的解决方案。 - Michael Plischke

3

虽然这是一个老问题,但我刚刚找到了一个适用于我的情况的解决方案:

在你的单选按钮中添加 android:minWidth="0dp" 即可消除按钮绘图左右两侧的空白。

如果你有一个包含 TextView 的 LinearLayout,并希望按钮在水平方向上完美地居中于 TextView 上方或下方,则此方法非常有效。


2
尝试这个,我已经测试过了。添加FrameLayout并将子元素的weight设置为它,然后从单选按钮中删除weight,将布局重心设置为单选按钮,就能得到你想要的效果。
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="5"
    android:orientation="horizontal">

    <RadioGroup
        android:id="@+id/qualityRadioGroup"
        android:layout_width="0dp"
        android:layout_height="wrap_content"

        android:layout_weight="5"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/qty1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:background="@mipmap/ic_launcher"
            android:button="@null"

            android:tag="1" />

        <RadioButton
            android:id="@+id/qty2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:padding="5dp"
            android:button="@null"
            android:background="@mipmap/ic_launcher"
            android:tag="2" />
        <RadioButton
            android:id="@+id/qty3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:padding="5dp"
            android:button="@null"
            android:background="@mipmap/ic_launcher"
            android:tag="3" />

        <RadioButton
            android:id="@+id/qty4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:padding="5dp"
            android:button="@null"
            android:background="@mipmap/ic_launcher"
            android:tag="4" />

        <RadioButton
            android:id="@+id/qty5"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:padding="5dp"
            android:button="@null"
            android:background="@mipmap/ic_launcher"
            android:tag="5" />
    </RadioGroup>

</LinearLayout>

关于可绘制选择器,请参考此链接

示例布局屏幕


在这种情况下,RadioGroup功能无法正常工作,即我们可以选择所有单选按钮。 - Ragini
无法理解,请问您能否给我一个原因,为什么它不能工作? - Umar Mansuri
它将被居中对齐,但它将允许多项选择单选按钮,而我想要单项选择单选按钮功能。 - Ragini
@Ragini 单选按钮用于从单选组中仅选择一次。如果您想要进行多选,则必须集成复选框。 - Umar Mansuri
如果你需要帮助,请告诉我 @Ragini - Umar Mansuri
显示剩余7条评论

1
下面提到的代码可正常运行。
 <RadioButton
                        android:id="@+id/qty1"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:button="@null"
                        android:checked="false"
                        android:drawableTop="@drawable/radio_button_selector"
                        android:tag="1"/>  

添加
android:button="@null"
android:drawableTop="@drawable/radio_button_selector"


0

你能否尝试为文本和单选按钮提供相同的布局宽度,并将它们的重心设置为Gravity.CENTER_HORIZONTAL

谢谢


文本和单选按钮都具有 android:layout_weight="1"。 - Ragini

0

将你的Linearlayout替换为Relativelayout

因为在线性布局上重力可能不起作用


0
  • 移除所有RadioButton的填充
  • 在每个RadioButton两侧添加一个LinearLayout
  • 将LinearLayout的尺寸设置为所需的边距大小
  • 为这些LinearLayout设置onClickListeners

在您的布局中:

             <LinearLayout
                android:id="@+id/btn2_padding_left"
                android:layout_width="50dp"
                android:layout_height="match_parent"
                android:orientation="horizontal"/>

            <RadioButton
                android:id="@+id/radio_btn_pg2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:duplicateParentState="true"
                android:paddingBottom="12dp"
                android:paddingTop="12dp"
                android:scaleX="0.5"
                android:scaleY="0.5" />
            <LinearLayout
                android:id="@+id/btn2_padding_right"
                android:layout_width="50dp"
                android:layout_height="match_parent"
                android:orientation="horizontal"/>

在你的活动类中:

    btn2_padding_left.setOnClickListener {
        radio_btn_pg2.isChecked = true
    }
    btn2_padding_right.setOnClickListener {
        radio_btn_pg2.isChecked = true
    }

0
使用边距将圆形置于中央。
<RadioButton
                    android:id="@+id/qty4"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:padding="@dimen/s5dp"
                    android:button="@drawable/radio_button_selector"
                    android:tag="4"
                    android:marginLeft="5dp" 
                    />

对于不同的屏幕,您需要以编程方式进行处理
并阅读此SO Thread


0
尝试在单选组中添加 gravity = "center" 并检查。
<LinearLayout                        
               android:layout_width="match_parent"
               android:gravity="center"
               android:layout_height="match_parent">
                <RadioGroup
                  android:id="@+id/qualityRadioGroup"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:orientation="horizontal"                  
                  android:weightSum="5">
                 <RadioButton
                    android:id="@+id/qty1"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:layout_gravity="center_vertical"
                    android:button="@drawable/radio_button_selector"
                    android:checked="false"
                    android:tag="1"/>
            </LinearLayout>

@Ragini,你在使用哪种布局? - Ramesh R
它在线性布局内部。 - Ragini
@Ragini,请检查更新后的答案,尝试在单选按钮组之前添加线性布局,并为线性布局添加重力属性。 - Ramesh R
在这种情况下,RadioGroup功能无法正常工作,即我们可以选择所有单选按钮。 - Ragini
@Ragini 然后尝试在 XML 中将单选按钮集的 checked 属性设置为 false。 - Ramesh R
@Ragini 在 XML 中将所有单选按钮的 checked 属性设置为 false。 - Ramesh R

0

使用外边距与去除权重来使圆形置于中央

 <RadioButton
        android:id="@+id/qty1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:tag="1"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接