Изменение цвета переключателя

Я разрабатываю приложение для викторины. Будет один вопрос и 4 варианта (переключатели). Если пользователь выберет какой-либо неправильный ответ, тогда я хочу повернуть этот цвет переключателя на красный. Как это сделать?

Ответ 1

Просто пришел, чтобы показать что-то, что действительно поможет мне в этом:

Все говорят о том, как использовать оттенок и как использовать colorAccent, но это не будет работать на телефонах с API менее 21.

Итак, реальное исправление этого или, по крайней мере, помогло мне использовать android.support.v7.widget.AppCompatRadioButton вместо RadioButton

С этим на вашем макете вы можете использовать: app:buttonTint="@color/yourColor"

не получая предупреждений или проблем о совместимости представления.

И не забывайте о добавлении:

xmlns:app="http://schemas.android.com/apk/res-auto"

для родителя макета или вашего виджета.

Изменить:

@aselims упоминает комментарий, что там не buttonTint в пространстве имен app.

Итак... вот мой нынешний стиль для этого решения:

<style name="MRadioButton.Purple" parent="Widget.AppCompat.CompoundButton.RadioButton">
    <item name="colorAccent">@color/youColor</item>
    <item name="colorControlHighlight">@color/yourColor</item>
    <item name="android:colorPressedHighlight">@color/yourColor</item>
    <item name="colorPrimaryDark">@color/yourColor</item>
    <item name="colorPrimary">@color/yourColor</item>
    <item name="colorControlActivated">@color/yourColor</item>
</style>

Ответ 2

Самое быстрое, что нужно сделать, - установить buttonTint на нужный цвет:

 <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/radio"
        android:checked="true"
        android:buttonTint="@color/your_color"/>

В вашем values/colors.xml поставьте свой цвет в этом случае красноватым:

<color name="your_color">#e75748</color>

Результат:

Colored Android Radio Button

Как указано @smashing, это будет работать только на уровне API >= 21

Ответ 3

Чтобы программно изменить цвет кнопки RadioButton и работает на уровне api < 21, следует использовать AppCompatRadioButton вместо RadioButton:

(иначе будет предупреждать setbuttontintlist requrie api level 21)

import android.support.v7.widget.AppCompatRadioButton;

AppCompatRadioButton radioButton = new AppCompatRadioButton(getActivity());
radioButton.setSupportButtonTintList(
        ContextCompat.getColorStateList(getActivity(),
        R.color.single_choice_state_list));

single_choice_state_list.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/single_choice_checked"></item>
    <item android:state_checked="false" android:color="@color/single_choice_unchecked"></item>
</selector>

Ответ 4

Этот сайт действительно хорош для настройки компонентов Android в целом: android-holo-colors

Просто выберите радиокнопку, сделайте цвет красным, загрузите и используйте его в своем проекте!

Ответ 5

Создайте селектор, который можно вырезать для вас с помощью переключателя в папке drawable/radio_button.xml и укажите все необходимые состояния для вашего переключателя.

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
 android:state_checked="true"
 android:state_window_focused="false"
 android:drawable="@drawable/radio_button_on" />
<item
 android:state_checked="false"
 android:state_window_focused="false"
 android:drawable="@drawable/radio_button_off" />
<item 
 android:state_checked="true" 
 android:state_pressed="true"
 android:drawable="@drawable/radio_button_on_pressed" />
<item
 android:state_checked="false" 
 android:state_pressed="true"
  android:drawable="@drawable/radio_button_off_pressed" />
<item
 android:state_checked="true"
  android:state_focused="true"
  android:drawable="@drawable/radio_button_on_selected" />
<item
  android:state_checked="false"
  android:state_focused="true"
  android:drawable="@drawable/radio_button_off_selected" />
<item
 android:state_checked="true"
 android:drawable="@drawable/radio_button_on" />
<item
 android:state_checked="false"
 android:drawable="@drawable/radio_button_off" />
</selector>

И укажите андроид: button = "@drawable/radio_button" для вашего переключателя

Не забудьте добавить соответствующие изображения для разных состояний переключателя.

Ответ 6

//get radio button reference from layout
RadioButton raPrivate = (RadioButton) layout.findViewById(R.id.radioPrivate);
//parse textColor from string hex code
int textColor = Color.parseColor("#000000");
//set textcolor to radioButton
raPrivate.setButtonTintList(ColorStateList.valueOf(textColor));

u может только распознавать объект ColorStateList как цвет для radioButton, если u использует valueOf, он будет использовать только один цвет.

Надеюсь, что это поможет: >

Ответ 7

Вы можете выполнить обратный совместимый оттенок на переключателе

XML:

<android.support.v7.widget.AppCompatRadioButton
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/radioButton"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:buttonTint="@color/red"/>

Или java:

CompoundButton button = (CompoundButton) findViewById(R.id.radioButton);
CompoundButtonCompat.setButtonTintList(button, ContextCompat.getColorStateList(this, R.color.red));

Ответ 8

Создайте образ! и поместите его в свои папки с возможностью рисования. вызовите его,

 RadioButton rb=(RadioButton) findViewById(R.id.radioButton1);
        rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                rb.setButtonDrawable(R.drawable.'you image here');
            }
        });
    }

Ответ 9

Надеюсь, что это поможет.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
       radioButton.setButtonTintList(ContextCompat.getColorStateList(mContext, R.color.colorGris));
    }else {//Do something if you have a lower version}

Для меня это работает.

Ответ 10

добавьте эти два свойства в свой стиль, который вы используете в манифесте с действием

<item name="colorControlNormal">@color/grey</item> // for state released color
<item name="colorAccent">@color/blueLogo</item>  //for state pressed color