いくつかのコンテキストから始めるために、SearchView ウィジェットの背景色のスタイルを設定しようとしています。この問題に対する非常に洞察に満ちた回答が既に投稿されており、私はそこから非常に多くのことを学びました。
ただし、私の理解には1つのギャップがあり、誰かがそれを説明してくれることを願っています. 次のようなテーマを作成すると、次のようになります。
<?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 (申し訳ありませんが、リンクは 2 つに制限されています)。