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

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

我找到了解决办法

        <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>

但问题是文本的引力应该在左边我想把它放到右边因为我在写阿拉伯语单词

enter image description here

98997 次浏览

尝试这个代码,并改变值为您的阿拉伯语单词. 。

Xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RadioGroup
android:id="@+id/radioGender"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >


<RadioButton
android:id="@+id/radioMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_male"
android:checked="true" />


<RadioButton
android:id="@+id/radioFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio_female" />


</RadioGroup>


<Button
android:id="@+id/btnDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_display" />


</LinearLayout>

在每个 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>

有一个属性称为 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"/>

看看 “ CustomChoiceList”示例,它解释了如何创建自己的复选框/单选按钮,或者如何使用 Android 设置中使用的默认复选框/单选按钮创建 ListView。您应该特别注意 res/layp/sample _ main.xml 文件,它解释了很多内容。

只要加上:

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

尝试添加以下属性到 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>

会放弃:

enter image description here

如果还有人想知道如何做到这一点,我认为这里有一个更好的解决方案: RadioGroup 类扩展了 线性布局。你可以添加一个简单的单选按钮和旁边的 TextView,很容易就能达到同样的效果:

<RadioGroup
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="horizontal">


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="خانم"/>


<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
/>


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="آقا"/>


<RadioButton
android:id="@+id/male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>


</RadioGroup>

这样就形成了如下的布局:

enter image description here

我使用了一个类似下面代码的技巧,在所有具有默认 UI 和默认选择行为的 SDK 中实现了这一点:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="ltr"
android:orientation="vertical"
android:padding="10dp">


<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">


<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="30dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:text="RadioButton 1"
android:textColor="@color/Black" />


<RadioButton
android:id="@+id/rb1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:scaleX="-1" />
</RelativeLayout>


<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">


<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="30dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:text="RadioButton 2"
android:textColor="@color/Black" />


<RadioButton
android:id="@+id/rb2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:scaleX="-1" />
</RelativeLayout>
</LinearLayout>

现在为了使按钮单一可选,只需编写按钮 onCheckedChanged监听器的代码,并使其他按钮未选中。

像这样:

rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
if(checked)
rb2.setChecked(false);
}
});

在 xml: (4.2及以上版本)中添加此内容

android:layoutDirection="rtl"

对于4.2以上的旧版本,可以使用来自 android.support. v4.view 的 ViewCompat:

ViewCompat.setLayoutDirection(findViewById(R.id.radio_button), ViewCompat.LAYOUT_DIRECTION_RTL);
            android:layout_width="wrap_content"
android:layout_height="wrap_content"
fontPath="@string/font_nunito_light"
android:text="Male"
android:layout_marginTop="@dimen/dp_10"
android:drawablePadding="@dimen/dp_10"
android:drawableStart="@drawable/selector_radio"
android:button="@null"
android:id="@+id/rb_"
android:checked="true"
android:textSize="@dimen/sp_15"

试试这个代码:

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


<RadioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textDirection="rtl"
android:layout_margin="4dp"
android:layoutDirection="rtl"
android:textAlignment="textStart"
android:layout_gravity="start"
android:text="اول"
android:textSize="15dp"/>
</RadioGroup>

结果: 显示结果

基于 伊尔苏的答案,我建议采用以下解决方案,利用材料波动效应,产生以下结果:

Demo

如果你想要 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>

非常简单,您希望文本出现在单选按钮的左侧,只需将布局方向更改为 rtl (= = 从右到左) :

android:layoutDirection="rtl"

保持材质风格使用 android: draableRight = “ ? android: attr/listChoiceIndicatorSingle”

<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@null"
android:text="rtl button"
android:drawableRight="?android:attr/listChoiceIndicatorSingle"/>

不要迷惑看到代码行,它只是一个简单的行

android:layoutDirection="rtl";//right to left,if you want you can set ltr

就像这样

        <RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layoutDirection="rtl"
android:text="English"
android:textSize="24dp"
/>

并仔细刷新您的预览更好地选择设计而不是蓝图

由于没有人提到这一点,下面是你可以做的方式,如果有人正在尝试这样做

RadioButton button = new RadioButton(context);
ViewCompat.setLayoutDirection(button, ViewCompat.LAYOUT_DIRECTION_RTL);


// Create the layout params for our buttons
RadioGroup.LayoutParams layoutParams = new
RadioGroup.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
button.setLayoutParams(layoutParams);
layoutParams.gravity = Gravity.RIGHT;
button.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
button.setGravity(Gravity.CENTER);

你可以在 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>
<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 将把文本向右移动,

尝试将以下属性添加到 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>

我的示例代码的图片

enter image description here