【问题标题】:Drawable resources referencing attributes引用属性的可绘制资源
【发布时间】: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


    【解决方案1】:

    我遇到了同样的问题,但无法运行。我的解决方法是将可绘制对象本身作为主题中的参考,然后有两个可绘制对象:一个用于浅色,一个用于深色。

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

    How to reference colour attribute in drawable?

    【讨论】:

    • 我明白了,谢谢你的链接。这个问题似乎是关于无法在drawables中引用属性,但对我来说这不是真的,因为我可以在工作正常的涟漪资源中引用 ?attr/color_control_highlight_default ...
    • 是pre-21还是post-21?
    • 这是21后的全部内容,21岁以下我有完全独立的资源
    • 好的,你确定你在-v21文件夹中有丢失的drawable吗?
    • 是的,完全确定,因为如果我将属性引用更改为颜色和可绘制引用,一切正常。
    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2015-10-07
    • 1970-01-01
    相关资源
    最近更新 更多