как поместить текст слева от переключателя в андроиде

Я хочу поместить текст переключателя слева, а не справа

Я нашел это решение

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

но проблема в том, что гравитация текста будет слева, я хочу поместить ее вправо, потому что я пишу арабские слова

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


person BasILyoS    schedule 20.09.2013    source источник
comment
Попробуйте с android:drawableLeft=@android:drawable/btn_radio   -  person Pratik Dasa    schedule 20.09.2013
comment
С точки зрения языка все, что вам нужно, это одна строка... то есть... (android:layoutDirection=rtl)..... это проще: P   -  person Muhammad Adil    schedule 24.06.2016


Ответы (19)


Добавьте android:gravity="right" в каждый RadioButton следующим образом.

  <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>
person Mukesh Kumar Singh    schedule 20.09.2013
comment
Что ж, это вроде работает... но дает другое изображение радиокнопки. На Holo вы получаете другое изображение в оригинальном RadioButton... :( - person Zordid; 16.03.2014
comment
но после этого переключатель не проверяется (нажимается). Я делаю что-то не так. пожалуйста, помогите stackoverflow.com/questions /28052820/ - person Shirish Herwade; 20.01.2015
comment
Хотя решение работает, первое предложение вводит в заблуждение. Переключатели перемещаются справа от текста, а не слева, из-за android:button="@null" и android:drawableRight="@android:drawable/btn_radio". Что делает android:gravity="right", так это выравнивание виджета справа от его родителя, а не только кнопки. - person rlazo; 18.06.2015
comment
не работает, если установлено программно rb.setGravity(Gravity.RIGHT); - person user924; 09.12.2017
comment
@muhammad-adil, если вы установите supportRtl=" false " в манифесте, вы его не получите - person l.mome; 21.07.2019

Попробуйте добавить следующие атрибуты в 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>

выдал бы:

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

person Irshu    schedule 31.07.2016
comment
для этого метода требуется минимальный уровень SDK 17, как я могу сделать такое представление, если у меня минимальный уровень SDK ‹ 17 - person jboxxpradhana; 04.10.2016
comment
вы должны использовать радиокнопку appcompat, чтобы обойти ограничение уровня sdk - person user2729200; 16.06.2017
comment
Я не уверен, работало ли это раньше, вроде как, но для меня это не дает результата на скриншоте - даже близко - person user1202032; 13.02.2018
comment
Вроде android:textAlignment не нужен. - person Onik; 07.10.2020

Основываясь на ответе 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>
person maxeh    schedule 21.06.2018
comment
Спасибо! Это работает. Но android:layoutDirection=rtl не нужен. - person Mohammad Reza Lohrasbi; 02.12.2019

Существует свойство с именем 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"/>
person RobinHood    schedule 20.09.2013
comment
но после этого переключатель не проверяется (нажимается). Я делаю что-то не так. пожалуйста, помогите stackoverflow.com/questions /28052820/ - person Shirish Herwade; 20.01.2015

Просто добавьте:

android:button="@null"
android:drawableRight="@android:drawable/btn_radio"
person Seyyed    schedule 17.02.2016

добавьте это в xml: (4.2 и выше)

android:layoutDirection="rtl"

для более старой версии, чем 4.2, используйте ViewCompat из android.support.v4.view:

ViewCompat.setLayoutDirection(findViewById(R.id.radio_button), ViewCompat.LAYOUT_DIRECTION_RTL);
person masood farmani    schedule 14.07.2017

Попробуйте добавить следующие атрибуты в 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>

это изображение моего примера кода

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

person Javid Sattar    schedule 15.09.2019

Очень просто, вы хотите, чтобы текст отображался слева от переключателя, вам просто нужно изменить направление макета на rtl (== справа налево):

android:layoutDirection="rtl"
person medmahmoudkedda    schedule 31.12.2018

Не запутайтесь, чтобы увидеть строки кодов, это просто простая строка

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

и осторожно обновите предварительный просмотр, чтобы выбрать «Дизайн, а не план».

person Saddan    schedule 12.02.2019

Если кому-то все еще интересно, как этого добиться, вот лучшее решение, на мой взгляд: RadioGroup расширяет LineareLayout. Вы можете добавить простой переключатель и 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>

Что затем делает макет, как показано ниже:

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

person Saeed Entezari    schedule 05.03.2017

<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 переместит ваш текст вправо,

person Rohit Lalwani    schedule 03.07.2019

вы можете изменить направление для вашего RadioButtons в RadioGroup добавить android:layoutDirection="rtl" в свой атрибут RadioGroup.

<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>
person Hemant Sharma    schedule 30.04.2019

попробуйте этот код:

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

результат: показать результат

person ali shahriarimanesh    schedule 13.06.2018
comment
Почему ОП должен попробовать этот код? Хороший ответ всегда будет содержать объяснение того, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. - person B001ᛦ; 13.06.2018

Я использовал трюк, подобный приведенному ниже коду, чтобы добиться этого во всех 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 listener и сделайте другие кнопки неотмеченными.

Как это:

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

чтобы сохранить стиль материала, используйте android:drawableRight="?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"/>
person Milad Mohammad Rezaei    schedule 27.01.2019
comment
Этот интересен тем, что не использует android:layoutDirection=rtl. К сожалению, rtl приведет к тому, что проверка переключится на другую сторону, когда законный интерфейс должен измениться. - person Brill Pappin; 13.05.2020

Взгляните на пример "CustomChoiceList", там объясняется, как вы можете создайте либо свои собственные флажки/переключатели, либо как вы можете создать ListView с флажками/переключателями по умолчанию, используемыми, например, в настройках Android. Особо следует отметить файл res/layout/sample_main.xml, в нем много пояснений.

person Daniel Höh    schedule 19.01.2014
comment
Пожалуйста, предоставьте соответствующий код или объяснение как часть вашего ответа, а не ссылку на другой ресурс. - person Sean Connolly; 20.01.2014

попробуйте этот код и измените значения на ваши арабские слова..

main.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>
person Community    schedule 20.09.2013
comment
о боже, что это за код, это переключатель по умолчанию. я хочу, чтобы радиокнопка, как на картинке выше, была радиокнопкой справа от текста, и текст должен быть выровнен по правому краю - person BasILyoS; 20.09.2013

Поскольку никто не упомянул об этом, ниже показано, как вы можете сделать это программно, если кто-то пытается это сделать.

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);
person murali krish    schedule 25.03.2019

person    schedule
comment
Хотя этот код может ответить на вопрос, вы все равно можете добавить несколько поясняющих предложений, так как это повысит ценность вашего ответа для других пользователей. - person MBT; 17.05.2018