web-dev-qa-db-ja.com

Lollipop RippleDrawableとPre-Lollipopのセレクター

背景として異なるdraw9patch pngを持つボタンがあります。現在、ボタンは次のようなselectorによって制御されています。

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

Android Lollipopの場合、タッチ効果用のRippleDrawableがあり、次のようになります。

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

新しいタッチリップル効果について:

1: draw9patchをRippleDrawableの背景として設定できますか?

2:上記の2つの異なるXMLをマテリアルデザインに合わせて調整するにはどうすればよいですか?新しいRippleDrawableの新しいフォルダー/レイアウトxmlをフォークする必要がありますか?

38
Neoh

1)はい。レイヤーの合成方法の詳細については、RippleDrawableのドキュメントを参照してください。ただし、基本的には以下が必要です。

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

または、無効な状態をクリーンな方法で処理するには、次のようにすることもできます。

<?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)はい、リップルXMLをdrawable-v21に配置する必要があります。

78
alanv