Android установить радиокнопку прямо из текста

доброе утро !

Я хотел бы установить переключатель прямо из его текста. я видел здесь такое решение:

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

это устанавливает переключатель прямо из его текста, но мне не нравится стиль альтернативного переключателя, который я получаю с этим кодом.

есть ли способ использовать стиль переключателя по умолчанию?


person Ghost108    schedule 04.12.2015    source источник
comment
Это для макета right-to-left?   -  person Sebastian Roth    schedule 04.12.2015
comment
#Ghost108 Сообщите пожалуйста   -  person IntelliJ Amiya    schedule 04.12.2015
comment
Возможный дубликат как поместить текст слева от переключателя в Android   -  person Sebastian Roth    schedule 04.12.2015
comment
android:text=Left устанавливает только текст влево, а не позицию   -  person Ghost108    schedule 04.12.2015
comment
Что именно вы хотите? Вам нужно изменить стиль радиокнопки? Если да, то настроить его. Вы получите уверенный стиль по умолчанию, потому что вы используете значок @android:drawable/btn_radio по умолчанию.   -  person Piyush    schedule 04.12.2015
comment
я только хотел бы установить текст слева от переключателя. этот тип переключателя, который я могу перетащить в свою активность в дизайнере   -  person Ghost108    schedule 04.12.2015
comment
вы используете RadioGroup, затем поместите android:layout_gravity=right и каждый RadioButton для установки android:layout_gravity=right   -  person Saif    schedule 04.12.2015
comment
сделано. но текст не ушел от переключателя.   -  person Ghost108    schedule 04.12.2015
comment
RadioButton для установки android:gravity=right   -  person Saif    schedule 04.12.2015
comment
проверьте эту демонстрацию, я думаю, она поможет вам programering.com/a/MjNwkDMwATM.html   -  person Saif    schedule 04.12.2015
comment
обратитесь к этой ссылке надежды это поможет тебе   -  person Dhiraj    schedule 04.12.2015
comment
работает ! благодарю вас :)   -  person Ghost108    schedule 04.12.2015


Ответы (5)


Программное решение 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

  }
person Akshay Kumar Both    schedule 13.06.2019

Вам просто нужно добавить следующий код в Radio Button

   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" />
person Sujeet    schedule 22.05.2020
comment
Короткое и простое решение с направлением RTL, хорошо! - person mbo; 02.07.2020
comment
Отличный ответ. Это работает и с LinearLayout! - person randomuser; 11.04.2021

Решено, но следующая проблема

Это было решение:

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

Результат:

введите здесь описание изображения

Проблема: я хотел бы скрыть возможность рисования (ic_selected_sort) в начале программно. и при щелчке установите его видимым.

я пробую что-то вроде этого:

        rb1.setButtonDrawable(android.R.color.white);

но я не вступает в силу. Любые идеи? :)

person Ghost108    schedule 04.12.2015

ты можешь попробовать это

<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">
person Saif    schedule 04.12.2015
comment
есть проблема, что я могу только коснуться переключателя, чтобы выбрать его, а не текст - person Ghost108; 04.12.2015
comment
вы можете добавить один макет и поместить оба контроллера внутри этого макета (RadioButton, textview) и установить щелчок по этому макету и обработать радиокнопку выбора и отмены выбора - person Saif; 04.12.2015
comment
Вы используете ‹RadioGroup›? - person Saif; 04.12.2015
comment
вы используете RadioGroup, затем поместите android:layout_gravity=right и каждый RadioButton для установки android:gravity=right - person Saif; 04.12.2015
comment
если мы поступим таким образом, то нам придется обрабатывать клики textview также с большей обработкой, если мы хотим выбрать один. Используя RadioGroup, нам не нужно отдельно обрабатывать события кликов для текстового представления. - person Akshay Kumar Both; 14.06.2019

Это то, что я добавил в Checkbox в своем проекте:

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

And my checkbox code looks like this:

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

Примечание: «снять отметку» — это прозрачный рисунок, который я создал для непроверенного состояния.

person Wanted    schedule 04.12.2015