2

いくつかのコンテキストから始めるために、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.xmlattrs.xml、および search_view.xml (申し訳ありませんが、リンクは 2 つに制限されています)。

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 に答える