2012-10-05 15 views

Respuesta

8

Por alguna razón, el tematizar con "searchAutoCompleteTextView" tampoco me funcionaba. Así lo resolví usando el siguiente código al configurar mi SearchView:

Nota: Todo esto se hace con la biblioteca de soporte v7 androide/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); 
    } 
} 

Hay dos desplegables recursos de búsqueda que proporciona la compatibilidad biblioteca, que son

  • R.drawable.abc_search_dropdown_light (fondo claro)
  • R.drawable.abc_search_dropdown_dark (fondo oscuro)
+1

Eso funciona bien, excepto que el color del texto no es el correcto, pero lo veré más – Benoit

+0

@Benoit Aquí 'un ejemplo de cómo cambiar el color del texto - http://stackoverflow.com/a/ 14364222/1299623 – jimmithy

+0

¿Qué es R.id.search_src_text? –

2

No tenemos múltiples pasos de hacerlo

En primer lugar, es necesario crear una costumbre dibujable con cuatro estados, puede hacer referencia a {} ABSLibrary /res/drawable/abs__list_selector_holo_dark.xml. Será algo como esto:

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

Guardar el dibujable personalizado a continuación (formato .xml) en su propia res de proyectos/estirable. Edite los estilos según corresponda remitiendo el ejemplo anterior. Tenga en cuenta que el estilo puede estar anidado profundamente, solo sea la paciencia mirando hacia abajo del árbol.

A continuación, crear (o poner en tema personalizado existente) un tema personalizado con lo siguiente, que debe ser guardado como res/valores/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> 

Tenga en cuenta que el "myCustomDrawable_DropDown" y " myCustomDrawable_popupBackground "tiene que ser el nombre del dibujable personalizado que acaba de crear.

Solo tienes que saber que el "android: dropDownSelector" y/o "android: popupBackground" son los responsables del tema de la ventana emergente de autocompletar.

Finalmente, aplique el tema en su Manifiesto!

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

Gracias por su respuesta, ya tengo un tema personalizado y me faltaba el "searchAutoCompleteTextView" pero incluso con ese elemento parece que no puedo cambiar el color del fondo. Tal vez algo lo está anulando. Tendré que cavar más profundo – Benoit

Cuestiones relacionadas