以颜色访问属性时出现Resources $ NotFoundException

时间:2018-10-02 12:14:07

标签: android resources

所以我将颜色定义为属性,因为它取决于主题。

<attr name="primary_text_color" format="color"/>

在主题中定义为

<style name="BaseReferencesTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="primary_text_color">#ffffffff</item>
</style>

我想用一种真实的色彩资源包装它。

<color name="selected_color_normal">?attr/primary_text_color</color>

然后从代码中读取

int resolvedColor = ContextCompat.getColor(context, R.color.selected_color_normal);

执行此操作时,我会遇到异常

 android.content.res.Resources$NotFoundException: Resource ID #0x7f06010e type #0x2 is not valid
        at android.content.res.Resources.getColor(Resources.java:955)
        at android.content.Context.getColor(Context.java:588)
        at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:523)

我在这里使用一些模块:

  1. attr_module,其中定义了属性。
  2. theme_module,其中定义了主题并将其设置为应用程序
  3. usage_module对该主题一无所知,但确实取决于attr_module

我肯定知道主题已应用于usage_module中的视图。当我不尝试以编程方式读取selected_color_normal而是仅应用属性时,所有依赖项均已正确设置-一切正常。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我认为,这里的问题是因为primary_text_color是属性,而selected_color_normal是颜色。

尝试制作

<color name="selected_color_normal">#FFFFFFFF</color>

然后,根据需要,您可以根据需要为primary_text_color赋予selected_color_normal值:{p>

<style name="BaseReferencesTheme" parent="Theme.AppCompat.NoActionBar">
<item name="primary_text_color">@color/selected_color_normal</item>

答案 1 :(得分:0)

  

CASE WHEN ((SELECT COUNT(*) From location Where file_importer_id = fi.file_importer_id AND status = 'Y') + (SELECT COUNT(*) From reservation Where file_importer_id = fi.file_importer_id AND status = 'N') + (SELECT COUNT(*) From startup Where file_importer_id = fi.file_importer_id AND status in ('X', 'X1'))) > 0 THEN 'Waiting' ELSE 'Accepted' END AS waiting_status -资源ID#0x7f06010e类型#0x2 无效

     

NotFoundException

#ffffffff

可能导致此问题。因为您得到?attr/primary_text_color ,这意味着它找不到特定的颜色,并且仅接受NotFoundException中的指定的颜色

答案 2 :(得分:0)

目前,我认为这个问题无法解决。目前,我的方法是尽可能使用?attr/primary_text_colorR.attr.primary_text_color