Совместимости приложений для Android-версии V7:21.0.0 изменить материал чекбокс цвета
я обновил свой проект, чтобы использовать последнюю библиотеку поддержки appcompat,в новой версии используются флажки material design и переключатели. Мое приложение имеет темную тематику, а флажки черные, что трудно увидеть. Я пытаюсь изменить их цвета в соответствии с Сохранение Совместимости но пока ничего не работает.
res / values / styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorAccent">@color/silver</item>
</style>
in строить.Gradle в:
android {
compileSdkVersion 21
buildToolsVersion '21.1.1'
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
}
.....
.....
compile 'com.android.support:appcompat-v7:21.0.0'
AndroidManifest.XML-код:
<application
android:name="ee.mtakso.App"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppBaseTheme">
галочки, editTexts, радиокнопки и т. д. оставайтесь черными.
Edit
Я не знаю, если это имеет большое значение, но радиокнопки и флажки я использую для CheckedTextView, следующим образом:
одноместный (переключатель):android:checkMark="?android:attr/listChoiceIndicatorSingle"
мульти (флажок): android:checkMark="?android:attr/listChoiceIndicatorMultiple"
так как они получают черный цвет материала drawable, я не думаю, что проблема исходит от них.
18 ответов:
у меня была аналогичная проблема с непроверенные флажки и радиокнопки. Я нашел решение, когда понял, что элементы управления снимают свой" выключенный " цвет с
<item name="android:textColorSecondary">@color/secondary_text</item>
EDIT:
указание, если тема вашего приложения или действия наследует одну из L AppCompat (Dark/Light/Light.DarkActionBar), вы можете установить:
<style name="SampleTheme" parent="Theme.AppCompat"> <item name="colorAccent">@color/green</item> <item name="android:textColorSecondary">@color/red</item> </style>и вот результат:
обратите внимание: когда вы получаете другой эффект вы, вероятно, использовать "неправильные" тема - убедитесь, что вы установите его правильно.
Я считаю, что это ошибка в теме AppCompat. Мой обходной путь добавление двух строк кода к каждому флажку в файле макета xml.
android:button="@drawable/abc_btn_check_material" android:buttonTint="@color/colorAccent"вы никогда не хотите напрямую ссылаться на abc_ drawables, но в этом случае я не нашел другого решения.
Это относится и к виджету RadioButton! Вы бы просто использовали abc_btn_radio_material вместо abc_btn_check_material
У меня были такие же проблемы, как и у вас. Я еще раз посмотрел на AppCompat v21-материальный дизайн для устройств Pre-Lollipop!
и я нашел это "вся ваша деятельность должна распространяться от ActionBarActivity, который простирается от FragmentActivity из библиотеки поддержки v4, так что вы можете продолжать использовать фрагменты.".
поэтому я изменил свою активность на ActionBarActivity, и это решило мои проблемы. Я надеюсь, что это решит и ваш тоже.
Я сделал это, чтобы изменить хотя бы границу флажка:
<style name="checkBoxComponent" parent="AppTheme"> //Checked color <item name="colorAccent">@color/blueBackground</item> //Checkbox border color <item name="android:textColorSecondary">@color/grayBorder</item> </style>и в моем макете
<android.support.v7.widget.AppCompatCheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/checkBoxComponent" android:text="Yay" />все еще выясняя, как получить фон флажка, хотя. Надеюсь, это поможет.
Я искал решение и нашел его.
Шаг 1
Продлить ActionBarActivitypublic static class MyActivity extends ActionBarActivity { //... }Шаг 2
В вашем файле стиля записывается два значения<style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="colorAccent">#009688</item> <item name="android:textColorSecondary">#757575</item> </style>colorAccent - проверил цвет
android: textColorSecondary - снят цвет
Шаг 3
Установить тему в AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.radiobutton" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> .... <activity android:name=".activity.MyActivity " android:theme="@style/MyTheme"/> ..... </application> </manifest>
результат
Android 5
Android 4.2.2
1. Объявите пользовательский стиль в ваших стилях.XML-файл.
<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/red</item> <item name="colorControlActivated">@color/red_pressed</item> </style>2. Примените этот стиль к вашему RadioButton через атрибут android: theme.
<RadioButton android:id="@+id/rb_option1" android:layout_width="match_parent" android:layout_height="wrap_content" android:checked="true" android:gravity="left" android:lineSpacingExtra="10dp" android:padding="10dp" android:text="Option1" android:textColor="@color/black" android:theme="@style/CustomStyledRadioButton"/>
100% работающего
просто Создайте стиль для вашего RadioButton и измените colorAccent, как показано ниже:
<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorAccent">@color/md_teal_600</item> </style>затем просто добавьте этот стиль в свой AppCompatRadioButton:
<android.support.v7.widget.AppCompatRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/RadioButtonTeal" />
чтобы задать цвета, переопределите:
зарегистрированного цвет:
<item name="android:colorControlActivated">@color/your_color</item>для непроверенного цвета:
<item name="android:colorControlNormal">@color/your_color</item>
вы получите много проблем с библиотекой совместимости как с флажками, так и с переключателями.
1) Они приходят только в черном цвете для любого Android 4.x устройств. Они приходят в порядке в Android 5.x и 2.х (не спрашивайте меня, почему он работает на 2.х, не имеют никакого представления).
2) у них нет отключенного состояния (не имеет значения, включены ли все ваши флажки, иначе Вы хороши для очень плохого сюрприза).
обратите внимание, что по умолчанию темный фон темы серый, а не черный, так что если вы держите по умолчанию это "ок".
чтобы решить эту проблему, я создал белую и отключенную версию следующих чертежей, все они добавлены в мой основной проект, но не в проект compat (для очевидной цели обслуживания):
abc_btn_check_to_on_mtrl_000 abc_btn_check_to_on_mtrl_015 abc_btn_radio_to_on_mtrl_000 abc_btn_radio_to_on_mtrl_015затем создал drawable для управления всеми состояниями (чтобы переопределить исходное состояние compat):
например, темная тема будет использовать этот:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" /> <item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" /> <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" /> </selector>свет тема будет использовать это (пользователь может переключать тему в моем приложение):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_light" /> <item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_light" /> <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" /> </selector>тогда все, что мне нужно было сделать, это переопределить тему compat по умолчанию (как activity, так и dialog, для светлых / темных тем), добавив что-то вроде этого:
<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item> <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>и это для светлых тем:
<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item> <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>теперь у меня есть полностью работоспособные флажки и радио на каждом Android версии! IMO библиотека compat вообще не тестировалась на темную тему, использовалась только белая тема. Отключенное состояние, вероятно, никогда не используется разработчиком библиотеки compat любой.
то, что вы сделали, должно работать в соответствии с сообщением в блоге android :
colorAccent : яркое дополнение к основному фирменному цвету. По умолчанию этот цвет применяется к элементам управления фреймворка (через colorControlActivated).
colorControlActivated: цвет, применяемый к элементам управления фреймворка в их активированном состоянии (например. проверено) состояние.
возможно, проблема исходит из вашей темы, которая имеет @style/Theme.Совместимости приложений.Свет как родитель, попробуйте только тему.Совместимости приложений :
<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <!-- customize the color palette --> <item name="colorAccent">@color/silver</item> </style>
Если вы хотите изменить определенный цвет фона флажка (не все приложение), вы можете попробовать этот трюк:
создать custom_checkbox.xml-файл для фона в папке drawable:
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="14dp" android:color="@android:color/transparent" /> <solid android:color="#ffffff" /> //the intended color of the background <corners android:radius="2dp" /> </shape>а затем установите его в качестве фона флажка:
<CheckBox android:id="@+id/rebate_tnc_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/custom_checkbox" />
вы можете передать другую тему в конструкцию диалогового окна оповещения
<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorControlNormal">@color/red</item> <item name="colorControlActivated">@color/green</item> </style>и использовать этот стиль в конструкторе
new AlertDialog.Builder(getContext(), R.style.RadioButton);
родителем вашего AppTheme является
@style/Theme.AppCompat.Light.изменить на
@style/Theme.AppCompat.теперь ваши элементы управления будут светиться на темном фоне.
Я использую библиотеку appcompat v21:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/custom_color</item> <item name="colorAccent">@color/custom_color</item> </style>приведенный выше стиль делает мой флажок, чтобы появиться с material design (проверено на android 5, 4.3, 4.1.1), но на android 2.3.3 появляется со старым стилем флажка.
Если вы пытаетесь создать комбобокс вручную (новый элемент управления ComboBox() ...), то независимо от того, что вы установили, они всегда будут черные. Понятно, что библиотека compat сломана, я создал отчет об ошибке для этого:https://code.google.com/p/android/issues/detail?id=158020
добавить этот синтаксис, чтобы цвет виджета, как флажок или переключатель android: buttonTint= "@color / silver"
добавить
<item name="android:textColorSecondary">@color/secondary_text</item>в стиле.XML и стиль.xml (v21)



Comments