Je veux utiliser des effets d'entraînement sur les boutons. AppCompat v22.1 a ajouté AppCompatButton et de nouvelles fonctionnalités à la teinte AppCompat.
Ma mise en page:
<Android.support.v7.widget.AppCompatButton
Android:id="@+id/add_remove_button"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:backgroundTint="@color/primary"
Android:textColor="@Android:color/white"
Android:text="Remove" />
Sur mon périphérique de test API 22, l'effet d'entraînement fonctionne parfaitement, mais je code pour l'API 11 et, malheureusement, backgroundTint a besoin d'une API> = 21. Comment définir l'effet d'entraînement sur Boutons des versions antérieures de l'API?
Utilisez simplement app:backgroundTint
au lieu de Android:backgroundTint
, la teinte prendra effet sous Lollipop. AppCompatActivity
AppCompatDelegateImplV7
utilise AppCompatViewInflater
pour modifier automatiquement Button ou TextView en AppCompatButton ou AppCompatTextView, puis app:backgroundTint
prend effet.
Les ondulations ne sont pas disponibles en tant que fonctionnalité intégrée dans Android <21. Cela est dû à des problèmes de performances: les périphériques dotés de la nouvelle API peuvent utiliser le RenderThread, qui n'est pas disponible pour les périphériques plus anciens. Voir aussi: http://Android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html
Pourquoi n'y a-t-il aucune ondulation sur les pré-sucettes? Une grande partie de ce qui permet à RippleDrawable de fonctionner en douceur est le nouveau RenderThread d’Android 5.0. Pour optimiser les performances sur les versions précédentes d'Android, nous avons laissé RippleDrawable pour le moment.
Pour prendre en charge la fonctionnalité d’ondulation sous API 21, vous devrez peut-être ajouter un dessin à l’arrière-plan de votre bouton:
<Android.support.v7.widget.AppCompatButton
Android:id="@+id/add_remove_button"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/button_ripple"
Android:backgroundTint="@color/primary"
Android:textColor="@Android:color/white"
Android:text="Remove" />
Ensuite, vous devez ajouter vos fichiers XML avec le même nom dans les répertoires drawable et drawable-v21 (si vous ne les avez pas, vous pouvez les créer et ils seront automatiquement liés).
/res/drawable-v21/button_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="@color/white">
<item>
<shape>
<solid Android:color="@color/white" />
</shape>
</item>
</ripple>
/res/drawable/button_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape>
<solid Android:color="@color/white" />
</shape>
</item>
</selector>