Зміна кольору кола перемикача


158

Я хочу змінити колір кола RadioButton в одному зі своїх проектів , я не міг зрозуміти, яку властивість встановити. Колір тла, який у мене є, чорний, тому він стає непомітним. Я хочу встановити колір кола білим.


перейдіть за цим посиланням: heliodorj.blogspot.in/2009/04/…
Android Developer

Використовуйте два зображення для перемикача, вибрано одне, а інше - не. Шануйте ці зображення на кнопці Radiobutton або за допомогою ресурсу setbackground або за допомогою селектора xml.
SAURABH_12

Відповіді:


288

Простіше, просто встановіть колір кнопкиTint: (працює лише на рівні api 21 або вище)

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

у ваших значеннях / color.xml введіть колір у цьому випадку червонуватим:

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

Результат:

Кольорова кнопка Android Radio

Якщо ви хочете зробити це за кодом (також api 21 і вище):

if(Build.VERSION.SDK_INT>=21)
{

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{

                    new int[]{-android.R.attr.state_enabled}, //disabled
                    new int[]{android.R.attr.state_enabled} //enabled
            },
            new int[] {

                    Color.BLACK //disabled
                    ,Color.BLUE //enabled

            }
        );                       


    radio.setButtonTintList(colorStateList);//set the color tint list
    radio.invalidate(); //could not be necessary
}

1
@emaillenin, якщо ви хочете змінити кольоровий відтінок за кодом, вам слід скористатись пунктом, control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);де controlви хочете змінити відтінок, і colorце ціле значення потрібного кольору, наприкладR.color.red
Jorge Arimany

1
@JorgeArimany Для RadioButton - це getButtonDravable або getCompoundDrawables? getCompoundDrawables повертає список
Ленін Радж Раджасекаран

@emaillenin, дякую, моя відповідь на ваш коментар була для інших елементів управління, як кнопка, я доповнив свою відповідь, додавши
шуканий

3
@JorgeArimany У мене це працює на> 21 вже .. Шукаю відповіді спеціально для <21
Ленін Радж Раджасекаран

Для зміни кольору галочки можна додати або замінити стан android.R.attr.state_checkedі додати колір.
6рхіда

160

Оновлення: 1. використовуйте замість цього

   <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

2. Потім додайте цей рядок у батьківський макет або Alt + Enterв Android Studio для автоматичного додавання xmlns:app="http://schemas.android.com/apk/res-auto"

Мінімальний приклад повинен виглядати так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

</LinearLayout>

3. У вашій програмі слід дзвонити так. AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

В основному, такий тип візерунка може застосовуватися для всіх типів AppCompact, таких як AppCompatCheckBox, AppCompatButton тощо.

Стара відповідь:

Для підтримки нижче Android 21 API ви можете використовувати AppCompatRadioButton. Потім використовуйте setSupportButtonTintListметод, щоб змінити колір. Це мій фрагмент коду для створення перемикача.

    AppCompatRadioButton rb;
    rb = new AppCompatRadioButton(mContext);

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_checked},
                    new int[]{android.R.attr.state_checked}
            },
            new int[]{

                    Color.DKGRAY
                    , Color.rgb (242,81,112),
            }
    );
    rb.setSupportButtonTintList(colorStateList);

Тестований результат в API 19:

Цей тестований на API 19

Див андроїда посилання посилання для більш докладно.


10
Ця відповідь має бути прийнятою. Якщо ви хочете додати цю підтримку перемикача через xml, використовуйте<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg

22
setSupportButtonTintListце приватний метод, який ви не збираєтеся використовувати. На деяких версіях Android перемикачі будуть вести себе дивно. Натомість використовуйте CompoundButtonCompat.setButtonTintList(rb, colorStateList).
wampastompa

2
@wampastompa має рацію. В API 22 було видно, що я бачив лише зовнішнє коло, яке ніколи не заповнювалося, коли перевірявся. @aknay; будь ласка, оновіть свою відповідь
Nino van Hooff

1
Я перебуваю на API 16. Додаю кнопки AppCompat Radio, як зазначено вище, однак він все ще не відображається правильно.
tccpg288

1
вам не потрібен код, дивіться відповідь Ігоря Олівейри. Працює для всіх версій.
Кирило Кармазін

77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />

11
Це відповідь для попередніх, поточних та постних пристроїв lollypop !! Великий
sdelvalle57

1
Це має бути прийнятою відповіддю. Короткий і ідеальний. ПРИМІТКА: використовуйте додаток: buttonTint = "@ color / Color", але не andoid: buttonTint = "@ color / Color"!
Кирило Кармазін

@KirillKarmazin прийнято має бути, який працює для <21
user924

56

Робота над API попередньо 21, а також посади 21. У вашому styles.xmlсайті:

<!-- custom style -->
<style name="radionbutton"
       parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
    <item name="android:button">@drawable/radiobutton_drawable</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

Ваш radio buttonxml повинен виглядати так:

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

Тепер все, що вам потрібно зробити, - це зробити radiobutton_drawable.xmlсвій drawable folder. Ось що вам потрібно вкласти:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_focused="true"/>
  <item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_focused="false"/>
  <item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_focused="true"/>
  <item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_focused="false"/>
</selector>

Ваше radio_unchecked.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke android:width="1dp" android:color="@color/colorAccent"/>
  <size android:width="30dp" android:height="30dp"/>
</shape>

Ваше radio_checked.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="oval">
      <stroke android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="30dp" android:height="30dp"/>
    </shape>
  </item>
  <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
    <shape android:shape="oval">
      <solid android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="10dp" android:height="10dp"/>
    </shape>
  </item>
</layer-list>

Просто замініть @color/colorAccentна обраний вами колір.


Як би я це зробив програмно?
tccpg288

@ tccpg288 Якщо ви використовуєте цей xml і хочете програмно змінити колір, просто використовуйте radioButton.setChecked (помилковий) або radioButton.setChecked (правда)
Vaibhav Sharma

Я не розумію вашого запитання. Чи можете ви, будь ласка, докладно?
Вайбхав Шарма

Моя помилка, чи не має значення, якщо я використовую звичайний RadioButton або AppCompat RadioButton?
tccpg288

1
Це не працює, а як бути, коли я ініціалізую RadioButton? Ось мій код: mPollAnswerArrayList.add ((indexCreate), новий RadioButton ((getActivity (). GetApplicationContext ()), null, R.style.radiobutton));
tccpg288

18

Ви повинні використовувати цей код:

<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/black" />

Використання app:buttonTintзамість, android:buttonTintа також android.support.v7.widget.AppCompatRadioButtonзамість Radiobutton!


16
  1. Заявіть про нестандартний стиль у файлі styles.xml.

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. Застосуйте цей стиль до своєї RadioButton через атрибут теми android:.

    <RadioButton  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Radio Button"
        android:theme="@style/MyRadioButton"/>

    тільки якщо ваша діяльність поширюється AppCompatActivity


1
Це слід сприймати як відповідь, воно працює на всіх версіях і це
найясніше

Мені довелося використовувати <item name="android:colorControlActivated">@color/pink</item>для того, щоб працювати на мене. Я досі не впевнений, чому. В іншому випадку це хороша відповідь.
Тейлор Веніссат

16

Для API 21

Створіть користувацький стиль RadioButton style.xml

 <style name="RadioButton" parent="Theme.AppCompat.Light">
     <item name="colorAccent">@color/green</item>
     <item name="android:textColorSecondary">@color/mediumGray</item>
     <item name="colorControlNormal">@color/red</item>
 </style>

У макеті використовуйте тему:

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/RadioButton" />

Для API 21 та більше

Просто використовуйте buttonTint

 <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:buttonTint="@color/green" />

Слід уточнити: buttonTint працює для API 21 та додатків, які використовують AppCompat / AndroidX, незалежно від API
Chisko

12

Питання старе, але я думаю, що моя відповідь допоможе людям. Ви можете змінити неперевірений і перевірений стан перемикача, використовуючи стиль у xml.

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

В стилі.xml

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

Ви можете встановити бажані кольори в цьому стилі.


Тема у RadioButton не працює (більше?). Він руйнується під час натискання кнопки, оскільки метод onClick не знайдений, хоча він є тут.
Бевор

це питання матиме іншу причину. Переконайтеся, що ви отримаєте ідентифікатор правильного перегляду, перш ніж застосовувати onClick на цьому поданні.
Яура


7

Я зробив це таким чином коротким (Робота над API до 21, а також пост 21)

Ваш перемикач у форматі xml повинен виглядати приблизно так

  <RadioButton android:id="@+id/radioid"                    
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"                 
                android:button="@drawable/radiodraw" />

в radiodraw.xml

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item android:state_checked="false" >
          <shape  android:shape="oval" >
              <stroke android:width="1dp" android:color="#000"/>
              <size android:width="30dp" android:height="30dp"/>
              <solid android:color="@android:color/transparent"/>
          </shape>
      </item>
      <item android:state_checked="true">
          <layer-list>
              <item>
                  <shape android:shape="oval">
                      <stroke android:width="1dp" android:color="#000"/>
                      <size android:width="30dp" android:height="30dp"/>
                      <solid android:color="@android:color/transparent"/>
                  </shape>
              </item>
              <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
                  <shape android:shape="oval">
                      <solid android:width="1dp" android:color="#000"/>
                      <size android:width="10dp" android:height="10dp"/>
                  </shape>
              </item>
          </layer-list>
      </item>
  </selector>

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


6

Іноді потрібно просто перекрити colorControlNormal, як це:

    <style name="RadioButtonStyle" parent="AppTheme">
       <item name="colorControlNormal">@color/pink</item>
       <item name="colorAccent">@color/colorPrimary</item>
       <item name="android:textColorSecondary">@color/black</item>
    </style>

І ви отримаєте таку кнопку:

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

colorControlNormal використовується для неперевіреного стану та colorAccent для перевіреного.


5

Для нього є атрибут xml:

android:buttonTint="yourcolor"

Переконайтеся, що ваш min API вище 21, або це не працюватиме
Jcorretjer

ви можете використовувати це для зворотної сумісності: app: buttonTint = "your_color"
Mridul Das

"Make sure your min API is higher then 21 or this won't work"це помилково. Я націлюю API 17 на AndroidX, і це єдине, що працювало для мене
Chisko

3

Для тих, хто хоче змінити вимкнені, перевірені та ввімкнені стани, які ви котите, виконайте наступні дії:

<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/radio_button_color" />

тоді в кольоровій папці Res Resol створіть файл під назвою "radio_button_color.xml":

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow900" android:state_selected="true" />
    <item android:color="@color/yellow800" android:state_checked="true" />
    <item android:color="@color/gray800" android:state_enabled="false" />
    <item android:color="@color/yellow800" android:state_enabled="true" />
</selector>

2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

Усі кнопки змінять колір, вікно кола та центральну галочку.


1
Але не пульсація ;-)
Waza_Be

1

RadioButton за замовчуванням приймає колір colorAccent у файлі res / values ​​/ color.xml. Тому перейдіть до цього файлу та змініть значення

<color name="colorAccent">#3F51B5</color>

до потрібного вам кольору.


0

Найпростіший спосіб - змінити colourAccentколір, values->colours.xml
але пам’ятайте, що це також змінить інші речі, такі як редагування кольору тексту курсору тощо.

< color name="colorAccent">#75aeff</color >


0

Якщо ви хочете встановити інший колір для натиснутого та невідоченого перемикача, просто скористайтеся:

   android:buttonTint="@drawable/radiobutton"  in xml of the radiobutton and your radiobutton.xml will be:  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#1E88E5"/>
<item android:state_checked="true" android:color="#00e676"/>
<item android:color="#ffffff"/>


0

просто використовуйте android:buttonTint="@color/colorPrimary"атрибут на тезі, сподіваюся, що це допоможе


0

У мене була ця проблема. Якщо ваш додаток має чорний фон і у вас багато RadioButtons, які невидимі через фон, складне редагування андроїда: buttonTint кожного, найкращим рішенням є зміна батьківської теми у вашому файлі styles.xml

я змінив

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

до

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

Тож кола RadioButtons стали світлішим відтінком сірого і тепер їх видно навіть із чорним фоном.

Це мій файл style.xml:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>


-4

@ jh314 правильно. В AndroidManifest.xml,

 <application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

В стилі.xml

  <!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/red</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

Назва елемента має бути colorAccent, воно визначає колір віджетів програми за замовчуванням.

Але якщо ви хочете змінити колір у коді, можливо, відповідь @ aknay правильна.


Це не дає відповіді на запитання. Коли у вас буде достатня репутація, ви зможете коментувати будь-яку публікацію ; натомість надайте відповіді, які не потребують уточнення від запитувача . - З огляду
semirturgay

Моя відповідь - змінити основний колір програми, і звичайно він може змінити колір радіо кнопки на білий.
Ітурбо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.