Lollipop RippleDrawable 与 Pre-Lollipop 的选择器
Posted
技术标签:
【中文标题】Lollipop RippleDrawable 与 Pre-Lollipop 的选择器【英文标题】:Lollipop RippleDrawable vs Selector for Pre-Lollipop 【发布时间】:2014-08-27 17:50:37 【问题描述】:我有不同 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:我要如何适应上述两种不同的xml我想遵循Material design?我是否必须为新的RippleDrawable
分配一个新的文件夹/布局 xml?
【问题讨论】:
我不认为你可以应用 9png 作为背景。您可以为您的rippleDrawable 应用颜色。 【参考方案1】: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 中。
【讨论】:
当我将Element ripple must be declared
。以上是关于Lollipop RippleDrawable 与 Pre-Lollipop 的选择器的主要内容,如果未能解决你的问题,请参考以下文章
如何在视图内的特定位置触发 Android Lollipop 的涟漪效应,而不触发触摸事件?