安卓:样式中的自定义颜色无效

4

我有一个如下的attrs.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <attr name="butBackColor" format="reference|color" />
</resources>

Styles.xml包含:

<style name="GreyButtonTheme" parent="android:style/Widget.Button">
  <item name="butBackColor">#3D3D3D</item>
</style>

我有一个custom_button.xml文件,其中包含一个可绘制的选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
...
        <item android:left="5dp" android:right="5dp" android:top="5dp" android:bottom="5dp">              
          <shape>
            <solid android:color="@color/butGreyBack" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
          </shape>
          </item>

最后,我有一个包含按钮的布局,我想要使用我的样式:

上面的代码片段对我来说运行良好 - 但是当我更改时:

<solid android:color="@color/butGreyBack" />

to:

<solid android:color="?butBackColor" />

然后我遇到了“Error inflating class”异常。为什么custom_button.xml选择器会失败? 我需要做什么才能让“butBackColor”属性起作用呢?
我之所以这样实现,是因为我想为不同的按钮集使用不同的样式(颜色)。
这是一个文件浏览器对话框项目,可能对想要该功能的人有用: FileBrowserTestDlg
1个回答

2
引用属性的格式为:
?[<package_name>:][<resource_type>/]<resource_name>

将此改为:

<solid android:color="?butBackColor" />

收件人:

<solid android:color="?attr/butBackColor" />

SparkyNZ 写道:这个问题的答案在评论的最后。上面的行并没有真正解决问题。我所学到的是,使用当前的Android SDK无法在形状/可绘制的XML文件中使用自定义属性。它们在视图定义中运行得很好,但不在形状/可绘制物中。


还尝试过使用完整的包名 <solid android:color="?com.example.filebrowsertest:attr/butBackColor" />,但也不喜欢。 - SparkyNZ
@Rod_Algonquin:没有运气。之前遵循教程将其从attr.xml重命名为attrs.xml。又将其重命名回来,还是不起作用。我需要一个命名空间行或什么吗?虽然整个包被指定了,但不应该需要的。顺便说一下,attr.xml在我的“values”文件夹中。 - SparkyNZ
@SparkyNZ 这是因为你将它指定为按钮的主题而不是形状的主题。 - Rod_Algonquin
@Rod_Algonquin:这篇SO帖子说我想要实现的目标是不可能的:https://dev59.com/rWox5IYBdhLWcg3wzng0 - SparkyNZ
谢谢!这个解决方案对我也起作用了! - Qazi Fahim Farhan
显示剩余11条评论

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