从一些上下文开始,我正在尝试设置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.xml,attrs.xml和search_view.xml(抱歉,有两个链接限制)。
答案 0 :(得分:0)
您明确链接的SO答案中的答案表明您不能在自己的主题中指定searchViewTextField,因为它不是可设置样式的资源。您需要根据其他答案修改代码中的值。
答案 1 :(得分:0)
问题是,为什么我不能使用主题属性“android:searchViewTextField”?
由于怀疑已编译的Android.jar文件与已发布的Android源不一致,我撕开jar并开始反编译(对我来说是第一个)。在探索之后,似乎有人用弯刀进入R $ style.class并砍掉了大量的资源。据我所知,它必须是故意的,甚至可能是手工完成的。
这种编译后的源代码修改在其他类似的框架中并非没有先例,但对于任何试图调试框架的人来说,这肯定会让人感到困惑。
具有讽刺意味的是,自动生成的R文件都有一个标题,表示
/* AUTO-GENERATED FILE. DO NOT MODIFY.
当您进行修改文件的例行程序时,有点无意义。