web-dev-qa-db-fra.com

API backgroundTint AppCompatButton <21

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?

26
Thomas Mohr

Utilisez simplement app:backgroundTint au lieu de Android:backgroundTint, la teinte prendra effet sous Lollipop. AppCompatActivityAppCompatDelegateImplV7 utilise AppCompatViewInflater pour modifier automatiquement Button ou TextView en AppCompatButton ou AppCompatTextView, puis app:backgroundTint prend effet.

 enter image description here

74
drakeet

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.

2
and_dev

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>
0
Nicolas Pansardi