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.
- Cómo configurar NAVIGATION_MODE_LIST en la barra de herramientas new appcompat v7 21
- Cómo poner un diseño complejo dentro de CollapsingToolbarLayout
- Cómo manejar el menú flotante Acción en modo horizontal
- Creación de un SearchView que se parezca a las directrices de diseño del material
- ClassNotFoundException: No encontró la clase "android.support.design.widget.AppBarLayout"
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
- Otra actividad aparece y cubre la mitad del tamaño de la pantalla
- Colapsar el diseño de la barra de herramientas con el logotipo, el título, el subtítulo en la barra de herramientas
- Android.support.v4.widget.CircleImageView no funciona
- Pantalla parpadeante en la transición de imagen entre actividades
- ¿Qué es una buena y SIMPLE biblioteca de vista de fichas
- ¿Cómo mostrar marcas para Discrete Slider?
- Diseño de material de Android de la barra de herramientas / SupportActionBar
- Barra de herramientas flotante con controles de selección de texto
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.