要从某些上下文开始,我正在尝试为搜索视图小部件的背景颜色设计。一个非常有见地的问题,因此已经发布了这个问题的答案,我从中学到了很多。
我的理解上有一个差距,我希望有人可以向我解释。当我创建一个主题时,例如以下内容:
<?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,attr.xml和search_view.xml(对不起,两个链接限制)。
so答案中您明确链接的答案说,您无法在自己的主题中指定searchViewTextfield,因为它不是可说的资源。您需要根据其他答案将其值修改为代码。
问题是,为什么我不能使用主题属性" android:searchViewTextfield"?
出于怀疑,我对已编译的android.jar文件没有与已发表的Android源相吻合,因此我撕开了罐子并开始分解(对我来说是第一个)。戳了戳后,似乎有人进入了R $ Style.Class。据我所知,它一定是故意完成的,甚至可能是手动进行的。
在其他类似框架中,这种编译的源修改并非没有先例,但是它肯定会使任何试图调试框架的人感到困惑。
具有讽刺意味
/* AUTO-GENERATED FILE. DO NOT MODIFY.
Kinda毫无意义,当您将其进行例行过程以修改文件。