J'ai mis à jour mon projet pour utiliser la dernière bibliothèque de support appcompat. La nouvelle version utilise des cases à cocher et des boutons radio pour la conception de matériel. Mon application a un thème sombre et les cases à cocher sont en noir, ce qui est difficile à voir. J'essaie de changer leurs couleurs en fonction de Maintenir la compatibilité mais jusqu'à présent, rien ne fonctionne.
res/values / styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorAccent">@color/silver</item>
</style>
in build.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">
Les cases à cocher, editTexts, boutons radio, etc. restent noirs.
Je ne sais pas si cela fait une grande différence, mais les boutons radio et les cases à cocher que j'utilise sont destinés à une CheckedTextView
, comme suit:
Single (bouton radio):Android:checkMark="?android:attr/listChoiceIndicatorSingle"
Multi (case à cocher):Android:checkMark="?android:attr/listChoiceIndicatorMultiple"
Étant donné que ceux-ci ont la matière noire pouvant être dessinée, je ne pense pas que le problème vienne d’eux.
J'ai eu un problème similaire avec CheckBoxes et RadioButtons non contrôlés . J'ai trouvé la solution, quand j'ai découvert que les contrôles prennent leur couleur "Off" de
<item name="Android:textColorSecondary">@color/secondary_text</item>
MODIFIER:
En spécifiant, si le thème de votre application ou de votre activité hérite de l'un des AppCompat de L (Dark/Light/Light.DarkActionBar), vous pouvez définir:
<style name="SampleTheme" parent="Theme.AppCompat">
<item name="colorAccent">@color/green</item>
<item name="Android:textColorSecondary">@color/red</item>
</style>
Et c'est le résultat:
Remarque: Lorsque vous obtenez un effet différent, vous utilisez probablement le thème "mauvais" - assurez-vous de le définir correctement.
Je crois que c'est une erreur dans le thème AppCompat. Ma solution de contournement consiste à ajouter deux lignes de code à chaque CheckBox du fichier de présentation XML.
Android:button="@drawable/abc_btn_check_material"
Android:buttonTint="@color/colorAccent"
Vous ne voulez jamais vraiment faire référence à abc_ drawables, mais dans ce cas, je n’ai trouvé aucune autre solution.
Cela s'applique également au widget RadioButton! Vous voudriez simplement utiliser abc_btn_radio_material au lieu de abc_btn_check_material
Je l'ai fait pour changer au moins la bordure d'une case à cocher:
<style name="checkBoxComponent" parent="AppTheme">
//Checked color
<item name="colorAccent">@color/blueBackground</item>
//Checkbox border color
<item name="Android:textColorSecondary">@color/grayBorder</item>
</style>
Et dans ma mise en page
<Android.support.v7.widget.AppCompatCheckBox
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:theme="@style/checkBoxComponent"
Android:text="Yay" />
Nous essayons toujours de trouver comment obtenir le fond de la case à cocher, cependant… __.
J'ai eu les mêmes problèmes que vous . J'ai encore regardé AppCompat v21 - Conception matérielle pour les appareils pré-Lollipop!
Et j'ai trouvé ceci "Toutes vos activités doivent s'étendre de ActionBarActivity, qui s'étend de FragmentActivity à partir de la bibliothèque de support v4, de sorte que vous puissiez continuer à utiliser des fragments.".
J'ai donc changé mon activité en ActionBarActivity et cela a résolu mes problèmes. J'espère que ça va résoudre le tien aussi.
Je cherchais une solution et je l'ai trouvée.
Étape 1
Étendre ActionBarActivity
public static class MyActivity extends ActionBarActivity {
//...
}
Étape 2
Dans votre fichier de style écrit deux valeurs
<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorAccent">#009688</item>
<item name="Android:textColorSecondary">#757575</item>
</style>
colorAccent- couleur vérifiée
Android: textColorSecondary- couleur non contrôlée
Étape 3
Définissez votre thème dans 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>
R&EACUTE;SULTAT
Android 5
Android 4.2.2
1. Déclarez le style personnalisé dans votre fichier styles.xml.
<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/red</item>
<item name="colorControlActivated">@color/red_pressed</item>
</style>
2. Appliquez ce style à votre RadioButton via Android: attribut 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% de travail
Créez simplement un style pour votre RadioButton et changez colorAccent comme ci-dessous:
<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">@color/md_teal_600</item>
</style>
Ensuite, ajoutez simplement ce style à votre AppCompatRadioButton:
<Android.support.v7.widget.AppCompatRadioButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:theme="@style/RadioButtonTeal" />
Pour spécifier les couleurs, remplacez:
pour couleur vérifiée:
<item name="Android:colorControlActivated">@color/your_color</item>
pour la couleur non vérifiée:
<item name="Android:colorControlNormal">@color/your_color</item>
Vous aurez beaucoup de problèmes avec la bibliothèque de compatibilité avec les cases à cocher et les boutons radio.
1) Ils viennent uniquement en noir pour les appareils Android 4.x. Ils viennent bien dans Android 5.x et 2.x (ne me demandez pas pourquoi cela fonctionne sur 2.x, n’ayant aucune idée).
2) Ils n’ont pas d’état désactivé (peu importe si toutes vos cases à cocher sont activées, sinon vous êtes bon pour une très mauvaise surprise).
Notez que l’arrière-plan du thème sombre par défaut est gris et non noir. Par conséquent, si vous conservez les valeurs par défaut, c’est «ok».
Pour résoudre ce problème, j'ai créé la version blanche et une version désactivée des dessinables suivants, qui ont tous été ajoutés à mon projet principal, mais pas dans le projet compat (à des fins de maintenance évidente):
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
Puis créé un dessinable pour gérer tous les états (pour écraser l'état d'origine de compat):
Par exemple, le thème sombre utilisera ceci:
<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>
Le thème lumineux utilisera ceci (l'utilisateur peut changer de thème dans mon application):
<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>
Ensuite, tout ce que je devais faire était de remplacer le thème compat par défaut (activité et dialogue, pour les thèmes clair/sombre), en ajoutant quelque chose comme ceci:
<item name="Android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
<item name="Android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
Et ceci pour les thèmes légers:
<item name="Android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item>
<item name="Android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>
Maintenant, j'ai des cases à cocher et des radios entièrement opérationnelles sur chaque version d'Android! OMI la bibliothèque de compat n'a pas du tout été testée pour le thème sombre, seul le thème blanc a été utilisé. L’état désactivé n’est probablement jamais utilisé par le développeur de la bibliothèque.
Il suffit d’étendre le ActionBarActivity like so:
Public class MainActivity extends ActionBarActivity {
//...
}
Si vous souhaitez modifier une couleur d'arrière-plan de case à cocher spécifique (pas l'application entière), essayez cette astuce:
Créez un fichier custom_checkbox.xml comme arrière-plan dans un dossier pouvant être dessiné:
<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>
puis le définir comme arrière-plan de la case à cocher:
<CheckBox
Android:id="@+id/rebate_tnc_checkbox"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/custom_checkbox" />
Ce que vous avez fait devrait fonctionner selon le blog d'Android:
colorAccent : Complément lumineux de la couleur de la marque principale. Par défaut, c'est la couleur appliquée aux contrôles de la structure (via colorControlActivated).
colorControlActivated : La couleur appliquée aux contrôles d'infrastructure dans leur état activé (ex. coché).
Peut-être que le problème vient de votre thème qui a @ style/Theme.AppCompat.Light comme parent, essayez avec juste Theme.AppCompat:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorAccent">@color/silver</item>
</style>
vous pouvez passer un autre thème à la construction du dialogue d'alerte
<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorControlNormal">@color/red</item>
<item name="colorControlActivated">@color/green</item>
</style>
et utiliser ce style dans le constructeur
new AlertDialog.Builder(getContext(), R.style.RadioButton);
Le parent de votre AppTheme est @style/Theme.AppCompat.Light
.
Changez-le en @style/Theme.AppCompat
.
Maintenant, vos contrôles seront clairs sur un fond sombre.
Si vous essayez de créer ComboBox à la main (new ComboBox () ...), alors, peu importe ce que vous définissez, ils seront toujours noirs. Il est clair que la bibliothèque compat est cassée, j'ai créé un rapport de bogue pour ceci: https://code.google.com/p/Android/issues/detail?id=158020
J'utilise appcompat library v21:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/custom_color</item>
<item name="colorAccent">@color/custom_color</item>
</style>
Le style ci-dessus fait apparaître ma case à cocher avec le design de matériau (testé sur Android 5, 4.3, 4.1.1) mais sur Android 2.3.3 avec l'ancien style de case à cocher.
Ajouter
<item name="Android:textColorSecondary">@color/secondary_text</item>
dans style.xml et style.xml (v21)
ajoutez cette syntaxe pour colorer un widget tel qu'une case à cocher ou un bouton radioAndroid:buttonTint="@color/silver "