我有不同的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:我如何适应我要遵循Material design的上述两个不同的xml?我是否必须为新的RippleDrawable派出新的文件夹/布局xml?

最佳答案

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

07-26 08:24