studio personalizar para paletas paleta navegacion librerias hexadecimal diseño colores color codigo barra android android-actionbar android-5.0-lollipop searchview android-toolbar

personalizar - paletas de colores android studio



¿Cómo puedo diseñar el SearchView cuando uso una barra de herramientas como una barra de acción? (4)

Después de profundizar en el código fuente y experimentar un poco, encontré una solución y aclaré un par de fuentes de confusión. Primero, el estilo SearchView debe configurar en el tema de la aplicación:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="searchViewStyle">@style/MySearchViewStyle</item> </style>

Entonces necesitamos establecer el suggestionRowLayout en el searchViewStyle :

<style name="MySearchViewStyle" parent="Widget.AppCompat.Light.SearchView"> <item name="suggestionRowLayout">@layout/search_suggestion_row</item> </style>

En mi pregunta, asumí que podríamos usar @style/Widget.AppCompat.Light.SearchView para obtener un menú de sugerencias ligero, pero resulta que este no es el caso; Necesitamos definir nuestro propio diseño. abc_search_dropdown_item_icons_2line.xml el mío en abc_search_dropdown_item_icons_2line.xml de la biblioteca AppCompat v21.

Estoy usando una Toolbar como una barra de acción en mi aplicación usando la biblioteca AppCompat v21, como se describe en esta publicación en el Blog de desarrolladores de Android. He diseñado la barra de acciones con el tema ThemeOverlay.AppCompat.Dark.ActionBar para que el texto sea claro. Sin embargo, me gustaría que la ventana de sugerencias de búsqueda emergente de la barra de acción muestre texto oscuro sobre un fondo claro, y no he podido lograr este efecto.

Aquí está el XML para mi barra de Toolbar barra de acción:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar_actionbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="@dimen/action_bar_elevation" app:theme="@style/ActionBarThemeOverlay" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

He intentado extender la superposición del tema de la barra de acción para SearchView :

<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item> </style>

He añadido este mismo elemento a mi tema principal para una buena medida:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item> </style>

Pero los elementos searchViewStyle no parecen tener ningún efecto. ¿Cómo puedo SearchView el SearchView aquí?


Según la publicación del blog de AppCompat v21 :

AppCompat ofrece la API SearchView actualizada de Lollipop, que es mucho más personalizable y con estilo (poner en cola el aplauso). Ahora usamos la estructura de estilo Lollipop en lugar de los antiguos atributos del tema searchView *.

Así es como values/themes.xml (en values/themes.xml ):

<style name="Theme.MyTheme" parent="Theme.AppCompat"> <item name="searchViewStyle">@style/MySearchViewStyle</item> </style> <style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> <!-- Background for the search query section (e.g. EditText) --> <item name="queryBackground">...</item> <!-- Background for the actions section (e.g. voice, submit) --> <item name="submitBackground">...</item> <!-- Close button icon --> <item name="closeIcon">...</item> <!-- Search button icon --> <item name="searchIcon">...</item> <!-- Go/commit button icon --> <item name="goIcon">...</item> <!-- Voice search button icon --> <item name="voiceIcon">...</item> <!-- Commit icon shown in the query suggestion row --> <item name="commitIcon">...</item> <!-- Layout for query suggestion rows --> <item name="suggestionRowLayout">...</item> </style>

Como más investigado en esta entrada de blog .



Aquí hay un ejemplo de search_suggestion_row.xml

<?xml version="1.0" encoding="utf-8"?> <!-- /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="58dip" style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown"> <!-- Icons come first in the layout, since their placement doesn''t depend on the placement of the text views. --> <android.support.v7.internal.widget.TintImageView android:id="@android:id/icon1" android:layout_width="@dimen/abc_dropdownitem_icon_width" android:layout_height="48dip" android:scaleType="centerInside" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:visibility="invisible" style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Icon1" /> <android.support.v7.internal.widget.TintImageView android:id="@+id/edit_query" android:layout_width="48dip" android:layout_height="48dip" android:scaleType="centerInside" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:background="?attr/selectableItemBackground" android:visibility="gone" style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Query" /> <android.support.v7.internal.widget.TintImageView android:id="@id/android:icon2" android:layout_width="48dip" android:layout_height="48dip" android:scaleType="centerInside" android:layout_alignWithParentIfMissing="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:visibility="gone" style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Icon2" /> <!-- The subtitle comes before the title, since the height of the title depends on whether the subtitle is visible or gone. --> <TextView android:id="@android:id/text2" style="?android:attr/dropDownItemStyle" android:textAppearance="?attr/textAppearanceSearchResultSubtitle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="29dip" android:paddingBottom="4dip" android:gravity="top" android:layout_alignWithParentIfMissing="true" android:layout_alignParentBottom="true" android:visibility="gone" /> <!-- The title is placed above the subtitle, if there is one. If there is no subtitle, it fills the parent. --> <TextView android:id="@android:id/text1" style="?android:attr/dropDownItemStyle" android:textAppearance="?attr/textAppearanceSearchResultTitle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_above="@android:id/text2" /> </RelativeLayout> <!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/lmp-mr1-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_search_dropdown_item_icons_2line.xml -->