web-dev-qa-db-fra.com

Styliser la vue de recherche Android et la liste déroulante dans la barre d'actions

Dans mon application, j'ai une fenêtre de recherche qui affiche des suggestions de recherche. Je veux que la liste déroulante/disque et le texte soient d'une couleur particulière. Actuellement, le seul changement que j'ai pu effectuer est la couleur du texte saisi via les éléments suivants:

   <style name="MyApp.AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
    <item name="Android:textColor">@color/white</item>
    <item name="Android:textCursorDrawable">@null</item>
    <item name="Android:background">@color/myBackgroundColor</item>
  </style>

L'application affiche actuellement les résultats de searchview comme ceci:

Here is how it currently looks

Ce que j'aimerais savoir, c'est comment modifier des éléments tels que la couleur searchHint, le fond déroulant et la couleur du texte de l'élément déroulant

Je cible l'API 19+

14
Kurian Vithayathil

Donc, après de nombreuses recherches, la solution la plus proche que je puisse trouver est la suivante (grâce à la réponse de GZ95 !):

SearchView searchView = new SearchView(context);
LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
//Set the input text color
autoComplete.setTextColor(Color.WHITE);
// set the hint text color
autoComplete.setHintTextColor(Color.WHITE);
//Some drawable (e.g. from xml)
autoComplete.setDropDownBackgroundResource(R.drawable.drop_down_bg);

Ce n'est pas le plus élégant mais ça a fonctionné pour moi. La seule question que j'ai en suspens est de savoir comment changer la couleur du texte de l'élément suggéré. Je suis le bienvenu pour entendre des solutions plus optimales à ce problème

9
Kurian Vithayathil

Dans votre styles.xml, définissez les paramètres suivants sur votre AppTheme

<style name="AppTheme" parent="AppTheme.Base">
    <!-- Customize your theme here. -->
    <item name="Android:dropDownItemStyle">@style/myDropDownItemStyle</item>
</style>

<style name="myDropDownItemStyle" parent="Widget.AppCompat.DropDownItem.Spinner">
    <item name="Android:textColor">@color/secondary_text_default_material_light</item>
</style>

Cela peut changer la couleur du texte de l'élément déroulant. Essaye.

15
huangming

Vous pouvez définir les styles suivants dans le fichier res/styles.xml si vous utilisez Android.support.v7.widget.SearchView. 

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="autoCompleteTextViewStyle">@style/myAutoCompleteTextViewStyle</item>
    <item name="textAppearanceSearchResultTitle">@style/mySearchResult</item>
</style>

<style name="myAutoCompleteTextViewStyle" parent="Widget.AppCompat.Light.AutoCompleteTextView">
    <item name="Android:popupBackground">#ffffff</item>
</style>

<style name="mySearchResult" parent="TextAppearance.AppCompat.SearchResult.Title">
    <item name="Android:textColor">#000000</item>
</style>

Si vous utilisez SearchView par défaut, les attributs doivent être "Android: autoCompleteTextViewStyle" et "Android: textAppearanceSearchResultTitle". J'ai écrit un post décrivant les détails à ce sujet.

8
t-benze

Avec les styles, vous modifiez l’arrière-plan du menu déroulant et la couleur du texte des éléments.

<!-- ToolBar -->
<style name="ToolBarStyle" parent="Theme.AppCompat">
    <item name="Android:textColorPrimary">@Android:color/white</item>
    <item name="Android:textColorSecondary">@Android:color/white</item>
    <item name="actionMenuTextColor">@Android:color/white</item>
    <item name="Android:dropDownItemStyle">@style/myDropDownItemStyle</item>
    <item name="Android:dropDownListViewStyle">@style/myDropDownListViewStyle</item>
</style>


<style name="myDropDownItemStyle" parent="Widget.AppCompat.DropDownItem.Spinner">
    <item name="Android:textColor">@color/secondary_text_default_material_light</item>
    <item name="Android:textSize">14dp</item>
</style>

<style name="myDropDownListViewStyle" parent="Widget.AppCompat.ListView.DropDown">
    <item name="Android:background">#FFF</item>
</style>
3
AntPachon

Vous pouvez définir suggestionRowLayout dans themes.xml:

<resources>
<style name="AppTheme" parent="AppTheme.Base">
    <item name="searchViewStyle">@style/AppTheme.SearchView</item>
</style>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/bluegrey_500</item>
    <item name="colorPrimaryDark">@color/bluegrey_900</item>
    <item name="colorAccent">@color/teal_500</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView">
    <!-- The layout for the search view. Be careful. -->
    <!--<item name="layout">...</item>-->
    <!-- Background for the search query section (e.g. EditText) -->
    <!--<item name="queryBackground">@color/bluegrey_400</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">@drawable/abc_ic_voice_search_api_mtrl_alpha</item>-->
    <!-- Commit icon shown in the query suggestion row -->
    <!--<item name="commitIcon">...</item>-->
    <!-- Layout for query suggestion rows -->
    <item name="suggestionRowLayout">@layout/item_suggestion_place</item>
</style>

1
localhost

J'ai eu le même problème (texte blanc dans les suggestions sur fond blanc), mais toutes les réponses ne fonctionnent pas pour moi. Donc, j'ai finalement résolu ce problème en changeant textColor attribut pour TextView pour adaptateur , attaché à AutoCompleteTextView :

code:

AutoCompleteTextView autoComplete = ...;
List<String> suggestions = Arrays.asList("a", "b", "c");
ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.dropdown_item, suggestions);
autoComplete.setAdapter(adapter);

dropdown_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
      Android:textColor="#000000"
      ...
/>
1
Evgeny Vagin