2

从一些上下文开始,我正在尝试设置 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>

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 中已过时)

提前致谢。

相关安卓资源:

theme.xmlattrs.xml和 search_view.xml (对不起,两个链接限制)。

4

2 回答 2

0

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

于 2012-11-09T05:22:18.017 回答
0

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

出于怀疑编译后的 Android.jar 文件与发布的 Android 源代码不一致,我撕开 jar 并开始反编译(对我来说是第一次)。在四处寻找之后,似乎有人带着砍刀进入了 R$style.class 并砍掉了大量资源。据我所知,它一定是故意的,甚至可能是手动完成的。

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

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

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

当您将修改文件设为例行程序时,这毫无意义。

于 2012-11-12T02:33:58.130 回答