java.lang.UnsupportedOperationException: 无法转换为颜色:类型=0x1

6

我一直在跟随Android开发者培训中的myfirstapp指南,但我遇到了一个问题,在定义颜色时,他们没有很好地进行解释。

他们提到,要创建自定义主题,可以按如下方式声明文本颜色:

themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
        parent="@android:style/Theme.Holo.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:textColor">@style/MyActionBarTitleText</item>
        <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar"
        parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@drawable/actionbar_background</item>
    </style>

    <!-- ActionBar title text -->
    <style name="MyActionBarTitleText"
        parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@color/actionbar_text</item>
    </style>

    <!-- ActionBar tabs text styles -->
    <style name="MyActionBarTabText"
        parent="@android:style/Widget.Holo.ActionBar.TabText">
        <item name="android:textColor">@color/actionbar_text</item>
    </style>
</resources>

他们没有提到如何指定@color/actionbar_text,但常识(以及一些谷歌搜索)表明需要在values包中创建一个colors.xml文件:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="actionbar_text">#ff355689</color>
</resources>

然而,在尝试运行应用程序时,它会出现错误:
Process: com.example.myfirstapp, PID: 25997
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.MainActivity}: java.lang.UnsupportedOperationException: Can't convert to color: type=0x1

如果我从colors.xml中删除该行,它将在找不到颜色引用时出错。我相当确信我的代码是正确的,有人能看到任何错误吗?
编辑
我想指出,实际上我正在使用与教程不同的themes.xml文件语法,因为教程编译不通过。教程使用了@style/Widget.Holo.ActionBar.TabText,我发现这实际上是Android的一个属性,所以我需要改用@android:style/Widget.Holo.ActionBar.TabText。
3个回答

10
如果我没理解错的话,这段代码意味着Android在期望颜色值时找到了一个引用,或者将引用转换为颜色失败。看着你的代码,这一行很显眼。
<item name="android:textColor">@style/MyActionBarTitleText</item>

虽然你可以在textColor中引用颜色,但我不确定你是否可以将其设置为样式。

因此,请尝试直接引用您的颜色。

<item name="android:textColor">@color/actionbar_text</item>

1
完全正确。有时候你就是看不到森林中的树木。谢谢! - RonnyKnoxville
在 <item> 中引用颜色的正确方式是什么? - Maurice Gavin

2

我用这段代码也遇到了同样的错误(无法将索引1的值转换为颜色:type=0x1):

<item name="colorPrimary">@color/material_dynamic_primary20</item>
<item name="colorPrimaryDark">@color/design_default_color_primary_dark</item>
<item name="colorAccent">@color/slidetoact_defaultAccent</item>

只需要用这个替换它即可

<item name="colorPrimary">#003549</item>
<item name="colorPrimaryDark">#3700B3</item>
<item name="colorAccent">#FF4081</item>

0
在我的情况下,我将 com.github.amlcurran.showcaseview:library:+ 更改为特定版本,即 com.github.amlcurran.showcaseview:library:5.4.3,现在它可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接