2012-10-05 10 views
11

Mi piacerebbe sapere come stile il menu a tendina di Android 4.0 SearchView?Stile Android SearchView Scorri popup

Sto utilizzando il Theme.Sherlock.Light.DarkActionBar, ma non so come stile di discesa di ricerca in uno sfondo bianco e un testo nero?

risposta

8

Per qualche motivo l'utilizzo di "searchAutoCompleteTextView" non ha funzionato neanche per me. Così ho risolto utilizzando il seguente codice quando si imposta la mia SearchView:

Nota: Questo è tutto fatto con il supporto v7 Android biblioteca/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); 
    } 
} 

Ci sono due drop down risorse di ricerca forniti dalla compatibilità biblioteca, sono

  • R.drawable.abc_search_dropdown_light (sfondo chiaro)
  • R.drawable.abc_search_dropdown_dark (sfondo scuro)
+1

Che funziona bene, tranne il colore del testo non è giusto, ma guarderò più – Benoit

+0

@Benoit Qui 'un esempio di come cambiare il colore del testo - http://stackoverflow.com/a/ 14364222/1299623 – jimmithy

+0

cos'è R.id.search_src_text? –

2

Ci sono più passaggi di farlo

In primo luogo, è necessario creare un costume drawable con quattro stati, è possibile fare riferimento a {} ABSLibrary /res/drawable/abs__list_selector_holo_dark.xml. Sarà qualcosa di simile:

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

Salva drawable personalizzato sopra (formato .xml) nel proprio progetto res/drawable. Modificare gli stili di conseguenza facendo riferimento all'esempio sopra. Si prega di notare che lo stile potrebbe essere profondamente annidato, basta essere la pazienza guardando l'albero.

Quindi creare (o mettere in tema personalizzato esistente) un tema personalizzato con la seguente, che deve essere salvato come res/Valori/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> 

Si prega di notare che la "myCustomDrawable_DropDown" e " myCustomDrawable_popupBackground "deve essere il nome del drawable personalizzato che hai appena creato.

Devi solo sapere che "android: dropDownSelector" e/o "android: popupBackground" sono coloro che sono responsabili per la tematizzazione della finestra popup automatica.

Infine,, applica il tema nel tuo manifesto!

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

Grazie per la risposta, ho già un tema personalizzato e mi mancava "searchAutoCompleteTextView" ma anche con quell'elemento non riesco a cambiare il colore dello sfondo. Forse qualcosa lo sta ignorando. Dovrò scavare più in profondità – Benoit