【发布时间】:2016-01-20 10:22:29
【问题描述】:
我有以下问题:
我的应用有浅色和深色主题,我正在尝试将触摸反馈应用于 v21 以上和以下的一些自定义视图(波纹触摸反馈)。我在drawable-v21 中为切换按钮创建了两个可绘制资源,一个用于浅色,一个用于深色:
黑暗:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/color_control_highlight_default">
<item android:id="@android:id/mask" android:drawable="@drawable/dark_button_border"/>
<item android:drawable="@drawable/button_toggle_states"/>
</ripple>
光:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/color_control_highlight_default">
<item android:id="@android:id/mask" android:drawable="@drawable/light_button_border" />
<item android:drawable="@drawable/button_toggle_states" />
</ripple>
可以看出,两个资源都引用了另一个drawable,它定义了按钮不同状态的颜色:
button_toggle_states:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?attr/color_primary_1" android:state_focused="true" />
<item android:drawable="?attr/color_primary_1" android:state_checked="true" />
<item android:drawable="?attr/color_primary_1" android:state_selected="true" />
<item android:drawable="?attr/button_border" />
</selector>
这个drawable 引用了在明暗主题之间变化的属性,这就是我的问题所在。尝试使用此drawable 时,我收到一个运行时错误,即无法找到res/drawable-v21 中的button_toggle_states。当我将drawable 更改为引用颜色和其他drawables 而不是属性时,即
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/lt_blue" android:state_focused="true" />
<item android:drawable="@color/lt_blue" android:state_checked="true" />
<item android:drawable="@color/lt_blue" android:state_selected="true" />
<item android:drawable="@drawable/light_button_border" />
</selector>
一切正常。但是使用该解决方案,我将不得不制作两个 button_toggle_state 文件,一个用于深色主题,一个用于浅色主题,而我认为这不应该是必需的,因为我们可以在 v21 及更高版本中引用属性。
是否有什么我做错了,或者在 drawable 中引用了另一个 drawable 使用的属性,只是不支持?
【问题讨论】:
标签: android android-theme