wake-up-neo.net

Styling Android-Suchansicht und Dropdown-Liste in der Aktionsleiste

In meiner App habe ich eine Suchansicht, die Suchvorschläge anzeigt. Ich möchte, dass Dropdown/Spinner und Text eine bestimmte Farbe haben. Derzeit ist die einzige Änderung, die ich vornehmen konnte, die Textfarbe des eingegebenen Textes über Folgendes:

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

Die App zeigt derzeit die Suchergebnisse wie folgt an:

Here is how it currently looks

Was ich gerne wissen möchte, ist, wie ich mit dem Ändern von Teilen wie der searchHint-Farbe, dem Dropdown-Hintergrund und der Dropdown-Elementtextfarbe umgehen würde.

Ich ziele auf API 19+ ab

14

Die nächste Lösung, die ich dazu finden kann, ist folgende (dank GZ95s Antwort !):

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);

Es ist nicht das eleganteste, aber es hat für mich funktioniert. Die einzige Frage, die mir offen steht, ist, wie Sie die vorgeschlagene Textfarbe ändern können. Ich bin herzlich eingeladen, bessere Lösungen für dieses Problem zu hören

9

Legen Sie in Ihrer styles.xml Folgendes für Ihr AppTheme fest

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

Dies kann die Textfarbe des Dropdown-Elements ändern. Probieren Sie es aus.

15
huangming

Sie können die folgenden Stile in der Datei res/styles.xml definieren, wenn Sie Android.support.v7.widget.SearchView verwenden. 

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

Wenn Sie die Standard-Suchansicht verwenden, sollten die Attribute "Android: autoCompleteTextViewStyle" und "Android: textAppearanceSearchResultTitle" sein. Ich habe ein post geschrieben, das die Details dazu beschreibt.

8
t-benze

Mit Stilen ändern Sie den Hintergrund der Dropdown-Liste und die Textfarbe der Elemente

<!-- 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

Sie können suggestionRowLayout in themes.xml definieren:

<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

Ich hatte das gleiche Problem (weißer Text in Vorschlägen auf weißem Hintergrund), aber alle Antworten funktionieren für mich nicht. So löste ich das Problem schließlich mit dem ändern von textColor attribut für TextView für adapter , an AutoCompleteTextView angehängt

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