为什么我不能在我的android主题中使用这个属性?

时间:2012-11-09 05:06:01

标签: android attributes styles themes searchview

从一些上下文开始,我正在尝试设置SearchView小部件的背景颜色。这个问题真的insightful so answer已经发布了,我从中学到了很多东西。

虽然我的理解存在一个差距,但我希望有人可以向我解释。当我创建主题时,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="MyCustomTheme" parent="android:Theme">
        <item name="android:searchViewTextField">@android:color/white</item>
    </style>
</resources>

Eclipse编译时出错,说它不知道属性:

error: Error: No resource found that matches the given name: attr 'android:searchViewTextField'.

但是,如果我重新声明属性:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <declare-styleable name="CustomSearchView">
        <attr name="android:searchViewTextField" format="reference" />
    </declare-styleable>
</resources>

Eclipse回复时出错:

error: Attribute "android:searchViewTextField" has already been defined

Eclipse似乎知道该属性,但在我想要使用它时可以方便地忘记该属性。 (我想知道后台是否有一些上下文切换)

无论如何,如果我删除了问题代码,那么我可以看到我的自定义主题从其父级继承searchViewTextField。我只是不明白为什么我不能用自己取代它。

(另一个答案提到了android.R.stylable,但该文件在api 16中已经过时了)

提前致谢。

相关Android来源:

themes.xmlattrs.xml和search_view.xml(抱歉,有两个链接限制)。

2 个答案:

答案 0 :(得分:0)

您明确链接的SO答案中的答案表明您不能在自己的主题中指定searchViewTextField,因为它不是可设置样式的资源。您需要根据其他答案修改代码中的值。

答案 1 :(得分:0)

问题是,为什么我不能使用主题属性“android:searchViewTextField”?

由于怀疑已编译的Android.jar文件与已发布的Android源不一致,我撕开jar并开始反编译(对我来说是第一个)。在探索之后,似乎有人用弯刀进入R $ style.class并砍掉了大量的资源。据我所知,它必须是故意的,甚至可能是手工完成的。

这种编译后的源代码修改在其他类似的框架中并非没有先例,但对于任何试图调试框架的人来说,这肯定会让人感到困惑。

具有讽刺意味的是,自动生成的R文件都有一个标题,表示

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

当您进行修改文件的例行程序时,有点无意义。