web-dev-qa-db-fra.com

Lollipop RippleDrawable vs Selector pour Pre-Lollipop

J'ai des boutons avec différents draw9patch png comme arrière-plan. Actuellement, les boutons sont contrôlés par selector qui ressemble à ceci:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item Android:drawable="@drawable/pressed" Android:state_pressed="true"/>
  <item Android:drawable="@drawable/disabled" Android:state_enabled="false"/>
  <item Android:drawable="@drawable/focused" Android:state_focused="true"/>
  <item Android:drawable="@drawable/default"/>
</selector>

Pour les Android Lollipop, ils ont un RippleDrawable pour l'effet tactile, qui ressemble à ceci:

<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:color="?android:colorControlHighlight">
    <item>
    ...
    </item>
</ripple>

Concernant le nouvel effet d'entraînement tactile:

1: Puis-je définir draw9patch comme arrière-plan pour RippleDrawable?

2: Comment puis-je intégrer les deux différents xml ci-dessus que je veux suivre la conception des matériaux? Dois-je débiter un nouveau dossier/layout xml pour le nouveau RippleDrawable?

38
Neoh

1) Oui. Consultez la documentation de RippleDrawable pour plus de détails sur la façon dont les couches sont composées, mais en gros vous voulez:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:color="?android:attr/colorControlHighlight">
    <item Android:drawable="@drawable/yourninepatch" />
</ripple>

Ou pour gérer également l'état désactivé d'une manière propre, vous pouvez souhaiter:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:color="?android:attr/colorControlHighlight">
    <item>
        <selector>
            <item Android:state_enabled="false">
                <nine-patch
                    Android:src="@drawable/yourninepatch"
                    Android:alpha="?android:attr/disabledAlpha" />
            </item>
            <item>
                <nine-patch Android:src="@drawable/yourninepatch" />
            </item>
        </selector>
    </item>
</ripple>

2) Oui, vous devez placer votre XML ondulé dans drawable-v21.

78
alanv