2012-10-05 13 views
11

Ich würde gerne wissen, wie das Dropdown-Popup des Android 4.0 SearchView stylen?Stil Android SearchView Drop-down-Popup

Ich bin mit dem Theme.Sherlock.Light.DarkActionBar, aber ich weiß nicht, wie die Drop-Down-Suche in einem weißen Hintergrund und einem schwarzen Text stylen?

Antwort

8

Aus irgendeinem Grund funktionierte Theming mit der "searchAutoCompleteTextView" auch nicht für mich. So löste ich es mit dem folgenden Code, wenn meine Suche einrichten:

Hinweis: Dies alles wird mit der Android v7 Unterstützung/AppCompat Bibliothek

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); 
    } 
} 
getan

Es gibt zwei Such Drop-Down von der Kompatibilität bereitgestellten Ressourcen Bibliothek, sie sind

  • R.drawable.abc_search_dropdown_light (Light Hintergrund)
  • R.drawable.abc_search_dropdown_dark (Dunkler Hintergrund)
+1

Das funktioniert gut, außer die Textfarbe ist nicht richtig, aber ich werde mehr aussehen – Benoit

+0

@Benoit Hier ein Beispiel dafür, wie Sie die Textfarbe ändern - http://StackOverflow.com/a/ 14364222/1299623 – jimmithy

+0

Was ist R.id.search_src_text? –

2

Es sind mehrere Schritte, dies zu tun

Zunächst müssen Sie eine benutzerdefinierte ziehbar mit vier Zuständen erstellen, die Sie {ABSLibrary} /res/drawable/abs__list_selector_holo_dark.xml verweisen. Es wird so etwas wie dieses:

<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" /> 

Speichern Sie die benutzerdefinierte ziehbar oben (.xml-Format) in das eigene Projekt res/ziehbar. Bearbeiten Sie die Stile entsprechend, indem Sie auf das obige Beispiel verweisen. Bitte beachten Sie, dass der Stil tief verschachtelt sein kann, seien Sie nur geduldig und schauen Sie den Baum hinunter.

Dann erstellen (oder setzen in bestehende eigenes Thema) ein eigenes Thema mit der folgenden, sollte es als res/Werte/styles.xml gespeichert werden:

<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> 

Bitte beachten Sie, dass die „myCustomDrawable_DropDown“ und " myCustomDrawable_popupBackground "muss der Name des benutzerdefinierten Zeichensatzes sein, den Sie gerade erstellt haben.

Sie müssen nur wissen, dass die "android: dropDownSelector" und/oder "android: popupBackground" diejenigen sind, die für die Theming der Autocomplete-Popup-Box verantwortlich sind.

Schließlich, wenden Sie das Thema in Ihrem Manifest an!

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.MyCustomTheme" > ... 
+0

Danke für Ihre Antwort, ich habe bereits ein benutzerdefiniertes Thema und mir fehlte die "searchAutoCompleteTextView", aber selbst mit diesem Element kann ich nicht scheinen, die Farbe des Hintergrunds zu ändern. Vielleicht hat etwas Vorrang. Ich muss tiefer graben – Benoit

Verwandte Themen