Lollipop RippleDrawable vs Selector de Pré- Lollipop

? Neoh @ | Original: StackOverFlow
---

Eu tenho botões com diferentes draw9patch png como pano de fundo . Atualmente, os botões são controlados por selector, que algo parecido com isto :

<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>

Para os Lollipop Android que têm um RippleDrawable para o efeito de toque, que é algo como isto :

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

Em relação ao novo efeito toque ripple :

1: Posso definir draw9patch como pano de fundo para RippleDrawable ?

2 : Como faço para acomodar os dois acima de XML de diferentes Eu quero seguir concepção material? Eu tenho que desembolsar uma nova pasta xml / layout para o novo RippleDrawable ?

---

Top 5 Responder

1alanv @

1) Sim . Consulte a documentação para RippleDrawable para obter mais detalhes sobre como as camadas são compostas, mas basicamente você quer:

<?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 também para lidar com o estado desativado de uma forma limpa, você pode querer :

<?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) Sim, você deve colocar o seu XML ripple em drawable - v21 .