Android如何在文本右侧设置单选按钮

5

早上好!

我想在文本右侧设置一个单选按钮。 我看到这里有一个解决方法,像这样:

 <RadioButton
            android:drawablePadding="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New RadioButton"
            android:id="@+id/radioButton"
            android:drawableRight="@android:drawable/btn_radio"
            android:button="@null"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:paddingStart="18dp"
            android:paddingEnd="12dp"
            android:textColor="@color/DefaultGrey"
            android:textSize="14sp"
            android:checked="false" />

这段代码可以将单选按钮放置在文本右侧,但我不喜欢使用这种方式得到的替代单选按钮样式。

是否有一种方法可以使用默认的单选按钮样式?


这是用于“从右到左”的布局吗? - Sebastian Roth
#Ghost108请通知 - IntelliJ Amiya
单选按钮设置 android:gravity="right" - Saif
请查看这个演示,我认为它会对你有所帮助。http://www.programering.com/a/MjNwkDMwATM.html - Saif
works ! thank you :) - Trombone0904
显示剩余7条评论
5个回答

3

Kotlin编程解决方案:

private fun createDrawableRightRadioButton(message: String): RadioButton {

    val radioButton = RadioButton(context)
    radioButton.layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)

    radioButton.setText(message)
    radioButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.resources.getDimension(R.dimen.text_medium)); //<dimen name="text_medium">14sp</dimen>
    radioButton.setTextColor(ContextCompat.getColorStateList(context, R.color.radio_grey_text_selector))
    radioButton.typeface = Typeface.create("roboto", Typeface.NORMAL)

    radioButton.layoutDirection = View.LAYOUT_DIRECTION_RTL
    radioButton.setButtonDrawable(0) // for removing default drawable
    radioButton.setCompoundDrawablePadding(10)
    radioButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.gostyle_radio_button_selector, 0); // for adding drawable on the right
    radioButton.gravity = Gravity.CENTER_VERTICAL

    return radioButton

  }

2
您只需要在单选按钮中添加以下代码。
   android:layoutDirection="rtl"

   eg.
   <RadioButton
         android:id="@+id/rb_male"
         android:layout_width="wrap_content"
         android:layoutDirection="rtl"
         android:layout_height="wrap_content"
         android:textColor="@color/text_color"
         android:text="Male" />

简短而简单的RTL方向解决方案,不错! - mbo
很棒的答案。这也适用于LinearLayout! - randomuser

1
已解决,但下一个问题
这是解决方案:
<RadioGroup
    android:id="@+id/rgRight"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_below="@+id/HeaderSectionSort"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:weightSum="1">

    <RadioButton
        android:id="@+id/radio1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:button="@null"
        android:drawableRight="@drawable/ic_selected_sort"
        android:text="@string/Radio1"
        android:textColor="@color/DefaultGrey"
        android:textSize="14sp"
        android:height="40dp"
        android:paddingLeft="16dp"
        android:paddingRight="10dp" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#f4f4f4"
        android:id="@+id/Seperator3"
        android:layout_marginTop="5dp" />

    <RadioButton
        android:id="@+id/radio2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:paddingLeft="16dp"
        android:button="@null"
        android:drawableRight="@drawable/ic_selected_sort"
        android:buttonTint="@color/DefaultGreen"
        android:text="@string/Radio2"
        android:textColor="@color/DefaultGrey"
        android:textSize="14sp"
        android:height="40dp"
        android:paddingRight="10dp" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#f4f4f4"
        android:id="@+id/Seperator4"
        android:layout_marginTop="5dp" />

    <RadioButton
        android:id="@+id/radio3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:paddingLeft="16dp"
        android:button="@null"
        android:drawableRight="@drawable/ic_selected_sort"
        android:text="Radio3"
        android:textColor="@color/DefaultGrey"
        android:textSize="14sp"
        android:height="40dp"
        android:paddingRight="10dp" />


</RadioGroup>

结果:

enter image description here

问题: 我希望能够通过编程在一开始隐藏可绘制对象(ic_selected_sort)。并且在点击后将其设置为可见。
我尝试了以下代码:
        rb1.setButtonDrawable(android.R.color.white);

但是它没有生效。有什么想法? :)

0

你可以试试这个

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<RadioButton
android:id="@+id/radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>

<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/radiobutton"
android:layout_alignBottom="@+id/radiobutton"
android:layout_alignParentLeft="true">

有一个问题,我只能点击单选按钮来选择它,而不能点击文本。 - Trombone0904
你可以添加一个布局并将两个控制器放在该布局中(RadioButton,TextView),然后设置该布局的点击事件,并处理单选按钮的选择和取消选择。 - Saif
你使用过<RadioGroup>吗? - Saif
如果您正在使用RadioGroup,则将android:layout_gravity="right"放置在每个RadioButton上以设置android:gravity="right"。 - Saif
如果我们这样做,那么我们还必须处理TextView的点击事件,并且如果我们想要选择一个,则需要更多的处理。使用RadioGroup,我们不需要单独处理TextView的点击事件。 - Akshay Kumar Both

0

这是我在项目中添加到复选框中的内容:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_checked="true"
 android:drawable="@drawable/tick_green" >
    <shape >
        <size android:width="@dimen/d32"
            android:height="@dimen/d32"/>
    </shape>
</item>

 <item android:state_checked="false"
 android:drawable="@drawable/uncheck" >
    <shape >
        <size android:width="@dimen/d32"
            android:height="@dimen/d32"/>
    </shape>
    </item>

我的复选框代码如下:

<CheckBox
    android:id="@+id/reason_cb_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:button="@null"
    android:drawableRight="@drawable/my_checkbox_drawable"  <- set it here
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="@dimen/d16"
    android:paddingRight="@dimen/d16"
    android:text="@string/some_text" />

你可以创建一个类似的可绘制对象,并将其设置为RadioButton的drawableRight属性。
注意: "uncheck" 是我为未选中状态创建的一种透明可绘制对象。

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