引用属性的可绘制资源

时间:2016-01-20 10:22:29

标签: android android-theme

我有以下问题:

我的应用程序有一个浅色和深色主题,我试图将触摸反馈应用于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时,我收到运行时错误,导致button_toggle_states中的res/drawable-v21无法找到。当我将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刚刚不支持的属性?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题但无法让它运行起来。我的解决方法是将drawable本身作为主题中的引用,然后有两个Drawable:一个用于light,一个用于dark。

另见: https://code.google.com/p/android/issues/detail?id=26251

How to reference colour attribute in drawable?