Diseño del widget SearchView mediante la biblioteca de soporte v21

Estoy tratando de estilo el widget SearchView con la nueva AppCompat v21, pero estoy enfrentando algunos problemas. No importa qué diseño he puesto en "suggestionRowLayout" atributo, no hace nada en absoluto. La lista desplegable de sugerencias del SearchView sigue siendo la misma.

Otro problema que tengo es cuando el "color de acento" es el mismo color que el "color primario", en la vista de búsqueda es imposible distinguir dónde está el cursor. ¿Sabes cómo puedo cambiar el color de acento en el SearchView para que sólo se aplique allí? He encontrado que Play Music tiene el mismo problema.

Estoy siguiendo la guía del blog de desarrolladores de Android:

Http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html

De acuerdo con lo que he visto en la fuente SearchView suggestionRowLayout valor de recurso en SearchView se produce al recuperar los atributos para el SearchView y en el método getSuggestionRowLayout() . Por otro lado la implementación de SuggestionAdapter de la biblioteca v7 está inflando abc_search_dropdown_item_icons_2line .

Idea para una solución:

Trate de hacer referencia a un diseño diferente con la ayuda de refs.xml . Asegúrese de guardar los mismos identificadores para las vistas como en abc_search_dropdown_item_icons_2line

  <item type="layout" name="abc_search_dropdown_item_icons_2line">@layout/my_suggestion_row</item> 

Mi problema era que el Searchview no era del tipo android.support.v7.widget.SearchView, por lo tanto todo el estilo no se aplicaba

  <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" app:showAsAction="ifRoom" app:actionViewClass="android.support.v7.widget.SearchView"/> 

suggestionsRowLayout no funcionaba para mí tampoco.

En mi caso, sólo necesitaba cambiar el color de fondo de cada fila y el color del texto.

Así que acabo de modificar el diseño de la Vista devuelta de newView() en mi SuggestionsAdapter:

 public class SuggestionsAdapter extends CursorAdapter { public SuggestionsAdapter(Context context, Cursor cursor) { super(context, cursor, false); } @Override public void bindView(View view, Context context, Cursor cursor) { TextView tv = (TextView) view.findViewById(R.id.item); tv.setText(cursor.getString(COL_NAME)); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // I modified the layout of search_item.xml View view = inflater.inflate(R.layout.search_item, parent, false); return view; } } 

Search_item.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@color/white" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="12dp" > <TextView android:id="@+id/item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/red" /> </LinearLayout> 

Por supuesto, puede establecer el fondo de un selector de dibujo para resaltar clic.

  • Problema de barra de estado de diseño de barra de herramientas de despliegue
  • Cardview dentro de la pestaña
  • Barra de búsqueda persistente de Android en la barra de herramientas
  • ¿Cómo animar las transiciones de actividad cuando se usan listas / cuadrículas / vistas de reciclador?
  • Lengüetas de material con estilo de Android 5.0
  • Android: la barra desplegable de la barra de herramientas se desplaza hacia arriba
  • 5.1 Crash - El color primario de TaskDescription debe ser opaco
  • Diseño de material Android NestedScrollView / CollapsingToolbarLayout comportamiento extraño apertura del teclado
  • Dónde obtener recursos sdk drawable para Lollipop
  • Error al usar ScrimInsetFrameLayout
  • ¿La transición reversa reversa del elemento del androide sobre detrás después de cambio de la orientación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.