Стиль Android SearchView Drop down popup

Я хотел бы знать, как создать раскрывающееся всплывающее окно Android 4.0 SearchView?

Я использую Theme.Sherlock.Light.DarkActionBar, но я не знаю, как стилизовать выпадающий поиск на белом фоне и черный текст?

Ответ 1

По какой-то причине тематика с использованием "searchAutoCompleteTextView" тоже не работала для меня. Поэтому я решил это, используя следующий код при настройке моего SearchView:

Примечание: все это делается с помощью библиотеки поддержки android v7/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 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);
    }
}

В библиотеке совместимости есть два ресурса с раскрывающимся списком, они

  • R.drawable.abc_search_dropdown_light (светлый фон)
  • R.drawable.abc_search_dropdown_dark (Темный фон)

Ответ 2

Существует несколько этапов

Во-первых, вам нужно создать пользовательский drawable с четырьмя состояниями, вы можете обратиться к {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" > ...