如何在Android中将文本放置在单选按钮的左侧

87

我想把单选按钮的文本放在左边而不是右边

我找到了这个解决方案

        <RadioGroup
        android:id="@+id/radios"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_gravity="right"
        android:inputType="text"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/first"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@color/white"
            android:button="@null"
            android:drawablePadding="30dp"
            android:drawableRight="@android:drawable/btn_radio"
            android:text="first"
            android:textColor="@color/Black"
            android:textSize="20dip" />

        <RadioButton
            android:id="@+id/second"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/Black"
            android:button="@null"
            android:drawablePadding="30dp"
            android:drawableRight="@android:drawable/btn_radio"
            android:text="second"
            android:textColor="@color/White"
            android:textSize="20dp" />

        <RadioButton
            android:id="@+id/third"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/Maroon"
            android:button="@null"
            android:drawablePadding="30dp"
            android:drawableRight="@android:drawable/btn_radio"
            android:text="third"
            android:textColor="@color/Vanilla"
            android:textSize="20dp" />
    </RadioGroup>

但问题是文本的重心会在左边,而我想把它放到右边,因为我写阿拉伯语。

在此输入图片描述


1
尝试使用 android:drawableLeft="@android:drawable/btn_radio"。 - Pratik Dasa
4
从语言的角度来看,你只需要一行代码......就是(android:layoutDirection="rtl")......这更容易 :P - Muhammad Adil
20个回答

167

尝试将以下属性添加到RadioButton中,它应该可以工作,这样你仍然可以在单选按钮上保留涟漪效果:

android:layoutDirection="rtl"
android:textAlignment="textStart"
android:layout_gravity="start"

请记得在您的应用清单中将supportsRtl属性设置为true。

例如:

   <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:layoutDirection="rtl"
            android:textAlignment="textStart"
            android:layout_gravity="start"
            android:text="The test item a"
            android:textSize="14sp" />

         ....                       

    </RadioGroup>
会发放:

输入图像描述


1
这个方法需要最低的SDK级别为17,如果我的SDK级别小于17,我该如何创建类似的视图? - jboxxpradhana
你应该使用AppCompat RadioButton来绕过SDK级别限制。 - user2729200
3
我不确定以前是否有效,这似乎是这样,但对我来说它没有产生屏幕截图中的结果——甚至都不接近。 - user1202032
似乎不需要使用 android:textAlignment - Onik

71

按照以下方式在每个RadioButton中添加android:gravity="right"

  <RadioGroup
    android:id="@+id/radios"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_gravity="right"
    android:inputType="text"
    android:orientation="vertical" >

    <RadioButton
        android:id="@+id/first"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:background="@color/white"
        android:button="@null"
        android:drawablePadding="30dp"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="first"
        android:textColor="@color/Black"
        android:textSize="20dip" 
        android:gravity="right"/>

    <RadioButton
        android:id="@+id/second"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/Black"
        android:button="@null"
        android:drawablePadding="30dp"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="second"
        android:textColor="@color/White"
        android:textSize="20dp"
         android:gravity="right"/>

    <RadioButton
        android:id="@+id/third"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/Maroon"
        android:button="@null"
        android:drawablePadding="30dp"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="third"
        android:textColor="@color/Vanilla"
        android:textSize="20dp"
        android:gravity="right" />
</RadioGroup>

1
嗯,这种方法有点用...但是它会给出不同的单选按钮图像。在Holo上,您会得到原始RadioButton中的另一张图片... :( - Zordid
但是在此之后,单选按钮没有被选中(点击)。我做错了什么吗?请帮忙。http://stackoverflow.com/questions/28052820/android-custom-radio-button-not-getting-checked - Shirish Herwade
15
虽然这个解决方案可行,但第一句话有误导性。由于使用了 android:button="@null"android:drawableRight="@android:drawable/btn_radio",单选按钮被移动到文本的右侧而不是左侧。android:gravity="right" 的作用是将小部件对齐到其父元素的右侧,而不仅仅是按钮。 - rlazo
如果以编程方式设置 rb.setGravity(Gravity.RIGHT);,则不起作用。 - user924
如果你在清单中设置 supportRtl="false",你就不会得到它了。 - Mehran Mahmoudkhani
UI界面如预期所示,但是“android:drawableRight =”@android:drawable/btn_radio“”在右侧显示默认的单选按钮图像,在选择RadioButton时无法选择,是否有任何问题? - Annie

47
根据 Irshu 的回答,我建议使用材料波纹效应来实现以下结果: 演示 如果您想要像 GIF 中所示的分隔符,则只需在单选按钮之间添加一个高度为1且具有背景颜色的视图即可。
<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:checkedButton="@+id/radioButton1">

    <RadioButton
        android:id="@+id/radioButton1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:button="@null"
        android:drawableRight="?android:attr/listChoiceIndicatorSingle"
        android:background="?android:selectableItemBackground"
        android:layoutDirection="rtl"
        android:layout_gravity="start"
        android:textAlignment="textStart"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="10dp"
        android:text="Button1"
        android:textSize="14sp" />

    <RadioButton
        android:id="@+id/radioButton2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:button="@null"
        android:drawableRight="?android:attr/listChoiceIndicatorSingle"
        android:background="?android:selectableItemBackground"
        android:layoutDirection="rtl"
        android:layout_gravity="start"
        android:textAlignment="textStart"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="10dp"
        android:text="Button2"
        android:textSize="14sp" />

    <RadioButton
        android:id="@+id/radioButton3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:button="@null"
        android:drawableRight="?android:attr/listChoiceIndicatorSingle"
        android:background="?android:selectableItemBackground"
        android:layoutDirection="rtl"
        android:layout_gravity="start"
        android:textAlignment="textStart"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="10dp"
        android:text="Button3"
        android:textSize="14sp" />
</RadioGroup>

2
谢谢!这个有效。但是android:layoutDirection="rtl"不是必要的。 - Mohammad Reza Lohrasbi

22

有一个名为android:drawableRight的属性,可以将您的可绘制对象设置在文本右侧,并将android:button设置为null。请查看以下代码片段:

注意:这是一个示例,您可以应用于所有单选按钮。

 <RadioButton 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@null"
             android:drawableRight="@android:drawable/btn_radio"
             android:text="Left"/>

1
但是在这之后,单选按钮没有被选中(点击)。我做错了什么。请帮忙。http://stackoverflow.com/questions/28052820/android-custom-radio-button-not-getting-checked - Shirish Herwade

13

在XML中添加以下内容:(适用于4.2及以上版本)

android:layoutDirection="rtl"

对于4.2之前的版本,请使用来自android.support.v4.view的ViewCompat:

ViewCompat.setLayoutDirection(findViewById(R.id.radio_button), ViewCompat.LAYOUT_DIRECTION_RTL);

12

只需添加:

android:button="@null"
android:drawableRight="@android:drawable/btn_radio"

9

尝试将以下属性添加到RadioButtons中,它会起作用。

<RadioGroup
    android:id="@+id/radioGroup_sample"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layoutDirection="rtl"
    android:orientation="horizontal"
    android:weightSum="2">

    <RadioButton
        android:id="@+id/radio_sample_one"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="right|center_vertical"
        android:layoutDirection="rtl"
        android:text="دریافت کد با ایمیل"
        android:button="@null"
        android:drawableRight="?android:attr/listChoiceIndicatorSingle"/>
    <RadioButton
        android:id="@+id/radio_sample_tow"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="right|center_vertical"
        android:layoutDirection="rtl"
        android:text="دریافت کد با پیامک"
        android:button="@null"
        android:drawableRight="?android:attr/listChoiceIndicatorSingle"/>

</RadioGroup>

这是我示例代码的图片:

输入图像描述


6
<RadioButton
    android:id="@+id/myRb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAlignment="gravity"
    android:gravity="left|center_vertical"
    android:layoutDirection="rtl"
    android:layout_gravity="start"
/>

现在 Rtl 会将你的文本向右移动,


5

非常简单,如果你想让文本出现在单选按钮的左边,只需要改变布局方向为rtl(即从右到左):

android:layoutDirection="rtl"

4

您可以改变RadioGroup中的RadioButtons方向,只需在RadioGroup属性中添加android:layoutDirection="rtl"即可。

<RadioGroup
    android:id="@+id/role_radioGroup_ID"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layoutDirection="rtl">
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/manager" />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="@string/fleetVehicle" />

   <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/personalVehicle" />
</RadioGroup>

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