为什么可以';我不能在我的android主题中使用这个属性吗?

为什么可以';我不能在我的android主题中使用这个属性吗?,android,attributes,styles,themes,searchview,Android,Attributes,Styles,Themes,Searchview,从上下文开始,我尝试设置SearchView小部件的背景颜色。关于这个问题的一个真正的答案已经发布了,我从中学到了很多 不过,我的理解有一个差距,我希望有人能给我解释一下。创建主题时,如以下所示: <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="MyCustomT

从上下文开始,我尝试设置SearchView小部件的背景颜色。关于这个问题的一个真正的答案已经发布了,我从中学到了很多

不过,我的理解有一个差距,我希望有人能给我解释一下。创建主题时,如以下所示:

<?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>
但是,如果我重新声明该属性:

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似乎知道该属性,但当我想使用它时,很方便地忘记了该属性。(我想知道背景中是否有上下文转换)

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

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

提前谢谢

相关安卓资源:


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

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

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

出于对编译的Android.jar文件与发布的Android源代码不一致的怀疑,我打开了jar并开始反编译(这对我来说是第一次)。在闲逛之后,似乎确实有人拿着弯刀进入R$style.class,并砍掉了大量资源。据我所知,这一定是故意的,甚至可能是手工的

在其他类似的框架中,这种编译后的源代码修改并非没有先例,但对于任何试图调试框架的人来说,这无疑是一种混乱

讽刺的是,自动生成的R文件都有一个标题,上面写着

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

当您将修改文件作为常规过程时,这有点毫无意义。

在attrs.xml文件中,searchViewTextField属性在中声明为可样式化。也许这导致了我不理解的问题。试着只使用“searchViewTextField”,而不使用“android:”前缀。您应该能够在继承自android:theme的自定义主题中覆盖它。我尝试了一下,但Eclipse报告“错误:找不到与给定名称匹配的资源:attr'searchViewTextField.”抱歉,但除此之外,我只是不理解使它们可用的机制。可能在Eclipse构建中删除了该属性。
/* AUTO-GENERATED FILE.  DO NOT MODIFY.