Стиль Android SearchView Раскрывающееся всплывающее окно

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

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


person Benoit    schedule 05.10.2012    source источник


Ответы (2)


По какой-то причине тема с использованием «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'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);
    }
}

Библиотека совместимости предоставляет два раскрывающихся ресурса поиска.

  • R.drawable.abc_search_dropdown_light (светлый фон)
  • R.drawable.abc_search_dropdown_dark (Темный фон)
person jimmithy    schedule 24.09.2013
comment
Это работает хорошо, за исключением того, что цвет текста неправильный, но я посмотрю больше - person Benoit; 08.10.2013
comment
@Benoit Вот пример того, как изменить цвет текста - stackoverflow.com/a/14364222/1299623 - person jimmithy; 08.10.2013
comment
что такое R.id.search_src_text? - person Nishant Shah; 05.05.2014
comment
@NishantShah Это идентификатор ресурса AutoCompleteTextView. - person jimmithy; 12.06.2014

Для этого нужно выполнить несколько шагов.

Во-первых, вам нужно создать собственный 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" />

Save the custom drawable above (.xml format) into your own project res/drawable. Edit the styles accordingly by referring the sample above. Please note that the style might be deeply nested, just be patience looking down the tree.

Затем создайте (или поместите в существующую пользовательскую тему) пользовательскую тему со следующим, ее следует сохранить как 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" > ...
person Yman    schedule 24.10.2012
comment
Спасибо за ответ, у меня уже есть пользовательская тема, и мне не хватало searchAutoCompleteTextView, но даже с этим элементом я не могу изменить цвет фона. Может что-то перевешивает. мне придется копнуть глубже - person Benoit; 25.10.2012