Boutons de colorant dans Android avec le matériel de conception et AppCompat

? mail929 @ | Original: StackOverFlow

Avant la AppCompat mise à jour est sorti aujourd'hui, je étais en mesure de changer la couleur des boutons L Android mais pas sur les anciennes versions . Après y compris la nouvelle mise à jour AppCompat je suis incapable de changer la couleur ou l'autre version, quand je fais essayer le bouton disparaît. Est-ce que quelqu'un sait comment changer la couleur du bouton ?

Les photos suivantes montrent ce que je veux atteindre :

Boutons de colorant dans Android avec le matériel de conception et AppCompat

Le bouton blanc est par défaut, le rouge est ce que je veux .

Ce est ce que je faisais auparavant pour changer la couleur des boutons dans le «____» :

styles.xml

et de le faire de manière dynamique :

<item name="android:colorButtonNormal">insert color here</item>

Aussi je ai fait changer le parent thème de button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY); à @android:style/Theme.Material.Light.DarkActionBar



Top 5 Respuesta

1Justin Powell @

Boutons ne sont pas encore pris en charge dans la bibliothèque AppCompat . De l' http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html :

Widget tinting

Lors de l'exécution sur les appareils avec Android 5.0, tous les widgets sont   teinté en utilisant le thème de couleur attributs [ colorPrimary ,   colorPrimaryDark, colorAccent, colorControlNormal, etc. ] . il y a   deux principales caractéristiques qui permettent cette teinte sur Lollipop : étirable, et   référencement thème attributs ( de la forme ? attr / foo ) dans dessinables .

AppCompat fournit un comportement similaire sur des versions antérieures d'Android   pour un sous-ensemble de widgets interface :

Everything provided by AppCompat’s toolbar (action modes, etc) EditText Spinner CheckBox RadioButton Switch (use the new android.support.v7.widget.SwitchCompat) CheckedTextView

«____» Est remarquablement absent . On dirait que nous allons devoir attendre jusqu'à ce qu'une future mise à jour .



2eluleci @

Depuis AppCompat ne supporte pas encore le bouton, vous pouvez utiliser XML comme arrière-plan . Pour faire que je avais un oeil au code source de l' Android et trouvé les fichiers associés pour coiffer les boutons de matériau .

1 - Look at the original implementation of material button from source.

Jetez un oeil à la https://github.com/android/platform_frameworks_base/blob/master/core/res/res/drawable/btn_default_material.xml .

Vous pouvez copier le fichier dans vos projets de dossiers étirable - v21 . Mais ne touchez pas l' attr de couleur ici . Le fichier que vous avez besoin de changer est le deuxième fichier .

étirable - v21 / custom_btn.xml

Theme.AppCompat.Light.DarkActionBar
2 - Get the shape of the original material button

Comme vous le savez, il ya une forme utilisée à l'intérieur de cette zone de dessin que vous pouvez trouver dans https://github.com/android/platform_frameworks_base/blob/master/core/res/res/drawable/btn_default_mtrl_shape.xml .

Button

3 - Getting dimensions of the material button

Et dans ce fichier que vous il ya quelques dimensions utilisées à partir du fichier https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/dimens_material.xml . Vous pouvez copier l'ensemble du dossier et de mettre dans votre dossier valeurs. Ceci est important pour l'application de la même taille ( qui est utilisé dans les boutons matériels) à tous les boutons

4 - Create another drawable file for old versions

Pour les anciennes versions, vous devriez avoir une autre étirable avec le même nom . Je mets directement les articles en ligne au lieu de référencer . Vous pouvez les référencer . Mais encore une fois, la chose la plus importante est les dimensions originales du bouton matériel.

étirable / custom_btn.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>
Result

Votre bouton aura un effet d'entraînement sur les dispositifs de Lollipop . Les anciennes versions auront exactement la même touche, sauf l'effet d'entraînement . Mais depuis que vous fournissez dessinables pour différents états, ils vont aussi réagissent au toucher événements (comme l'ancienne ) .

3kiruwka @

Si vous voulez seulement le bouton "Flat" de matériel, vous pouvez personnaliser leur fond en utilisant http://developer.android.com/reference/android/R.attr.html#selectableItemBackground attribut comme expliqué http://stackoverflow.com/a/ 27932664/2358786 .