Я хочу змінити колір кола RadioButton в одному зі своїх проектів , я не міг зрозуміти, яку властивість встановити. Колір тла, який у мене є, чорний, тому він стає непомітним. Я хочу встановити колір кола білим.
Я хочу змінити колір кола RadioButton в одному зі своїх проектів , я не міг зрозуміти, яку властивість встановити. Колір тла, який у мене є, чорний, тому він стає непомітним. Я хочу встановити колір кола білим.
Відповіді:
Простіше, просто встановіть колір кнопки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>
Результат:
Якщо ви хочете зробити це за кодом (також 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
}
control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);
де control
ви хочете змінити відтінок, і color
це ціле значення потрібного кольору, наприкладR.color.red
android.R.attr.state_checked
і додати колір.
Оновлення: 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:
Див андроїда посилання посилання для більш докладно.
<android.support.v7.widget.AppCompatRadioButton ../>
setSupportButtonTintList
це приватний метод, який ви не збираєтеся використовувати. На деяких версіях Android перемикачі будуть вести себе дивно. Натомість використовуйте CompoundButtonCompat.setButtonTintList(rb, colorStateList)
.
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/Color" />
Робота над 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 button
xml повинен виглядати так:
<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
на обраний вами колір.
Ви повинні використовувати цей код:
<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
!
Заявіть про нестандартний стиль у файлі styles.xml.
<style name="MyRadioButton" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
Застосуйте цей стиль до своєї 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
<item name="android:colorControlActivated">@color/pink</item>
для того, щоб працювати на мене. Я досі не впевнений, чому. В іншому випадку це хороша відповідь.
Для 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" />
Питання старе, але я думаю, що моя відповідь допоможе людям. Ви можете змінити неперевірений і перевірений стан перемикача, використовуючи стиль у 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>
Ви можете встановити бажані кольори в цьому стилі.
Я зробив це таким чином коротким (Робота над 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>
повинні додати кольори прозорі для малювання неперевіреного стану, інакше він намалювати суцільний чорний овал.
Іноді потрібно просто перекрити 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 для перевіреного.
Для нього є атрибут xml:
android:buttonTint="yourcolor"
"Make sure your min API is higher then 21 or this won't work"
це помилково. Я націлюю API 17 на AndroidX, і це єдине, що працювало для мене
Для тих, хто хоче змінити вимкнені, перевірені та ввімкнені стани, які ви котите, виконайте наступні дії:
<!-- 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>
RadioButton за замовчуванням приймає колір colorAccent у файлі res / values / color.xml. Тому перейдіть до цього файлу та змініть значення
<color name="colorAccent">#3F51B5</color>
до потрібного вам кольору.
Найпростіший спосіб - змінити colourAccent
колір, values->colours.xml
але пам’ятайте, що це також змінить інші речі, такі як редагування кольору тексту курсору тощо.
< color name="colorAccent">#75aeff</color >
Якщо ви хочете встановити інший колір для натиснутого та невідоченого перемикача, просто скористайтеся:
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"/>
просто використовуйте android:buttonTint="@color/colorPrimary"
атрибут на тезі, сподіваюся, що це допоможе
У мене була ця проблема. Якщо ваш додаток має чорний фон і у вас багато 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>
@ 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 правильна.