11

Android 4.0のドロップダウンポップアップのスタイルを設定する方法を知りたいSearchViewですか?

を使用してTheme.Sherlock.Light.DarkActionBarいますが、ドロップダウン検索を白い背景と黒いテキストにスタイル設定する方法がわかりませんか?

4

2 に答える 2

8

何らかの理由で、「searchAutoCompleteTextView」を使用したテーマ設定も機能しませんでした。そこで、SearchViewを設定するときに、次のコードを使用して解決しました。

注:これはすべてandroidv7サポート/AppCompatライブラリで行われます

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.search_menu, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    // Theme the SearchView's AutoCompleteTextView drop down. For some reason this wasn't working in styles.xml
    SearchAutoComplete autoCompleteTextView = (SearchAutoComplete) searchView.findViewById(R.id.search_src_text);

    if (autoCompleteTextView != null) { 
        autoCompleteTextView.setDropDownBackgroundResource(R.drawable.abc_search_dropdown_light);
    }
}

互換性ライブラリによって提供される2つの検索ドロップダウンリソースがあります。

  • R.drawable.abc_search_dropdown_light(明るい背景)
  • R.drawable.abc_search_dropdown_dark(暗い背景)
于 2013-09-24T13:49:37.197 に答える
2

そうすることには複数のステップがあります

まず、4つの状態を持つカスタムドローアブルを作成する必要があります。{ABSLibrary}/res/drawable/abs__list_selector_holo_dark.xmlを参照できますこれは次のようになります:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_window_focused="false" android:drawable="@android:color/transparent" />

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/abs__list_selector_disabled_holo_dark" />
<item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/abs__list_selector_disabled_holo_dark" />
<item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/abs__list_selector_background_transition_holo_dark" />
<item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/abs__list_selector_background_transition_holo_dark" />
<item android:state_focused="true"                                                             android:drawable="@drawable/abs__list_focused_holo" />

上記のカスタムドローアブル(.xml形式)を独自のプロジェクトres/drawableに保存します。上記のサンプルを参照して、それに応じてスタイルを編集してください。スタイルは深くネストされている可能性があることに注意してください。ツリーを見下ろすのは辛抱強く待ってください。

次に、次のカスタムテーマを作成(または既存のカスタムテーマに配置)します。res/ values/styles.xmlとして保存する必要があります。

<style name="Theme.MyCustomTheme" parent="Theme.Sherlock.Light.DarkActionBar">
<item name="searchAutoCompleteTextView">@style/MySearchAutoCompleteTextView</item></style>

<style name="MySearchAutoCompleteTextView" parent="Sherlock.__Widget.SearchAutoCompleteTextView">
<item name="android:dropDownSelector">@drawable/myCustomDrawable_DropDown</item>
<item name="android:popupBackground">@drawable/myCustomDrawable_popupBackground</item></style>

「myCustomDrawable_DropDown」と「myCustomDrawable_popupBackground」は、作成したばかりのカスタムドローアブルの名前である必要があることに注意してください。

「android:dropDownSelector」や「android:popupBackground」がオートコンプリートポップアップボックスのテーマ設定を担当していることを知っておく必要があります。

最後に、マニフェストにテーマを適用します。

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.MyCustomTheme" > ...
于 2012-10-24T18:37:35.530 に答える