14

In meiner App habe ich eine Suchansicht, die Suchvorschläge anzeigt. Ich möchte, dass das Dropdown/Spinner und der Text eine bestimmte Farbe haben. Derzeit ist die einzige Änderung habe in der Lage zu ich mache, ist die Textfarbe des eingegebenen Textes über die folgenden:Styling android Suche anzeigen und Dropdown-Liste in Actionbar

<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 zur Zeit zeigt die Sucheergebnisse wie folgt aus:

Here is how it currently looks

Was Ich würde gerne wissen, wie würde ich gehen, um Teile wie die searchHint Farbe, den Drop-Down-Hintergrund und die Drop-Down-Element Textfarbe zu ändern?

Ich bin Targeting API 19+

Antwort

9

So nach viel suchen, die nächste Lösung, die ich auf diese finden kann, ist wie folgt (dank GZ95's answer!):

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 Beste elegant, aber es hat für mich funktioniert. Die einzige Frage, die ich habe, ist, wie man die vorgeschlagene Artikeltextfarbe ändert. Ich bin willkommen optimalere Lösungen für dieses Problem zu hören

+2

jedikv hier versuchen Sie eine sauberere soution: 'SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete) searchView.findViewById (R.id.search_src_text); autoComplete.setDropDownBackgroundResource (R.drawable.drop_down_bg); ' – darkangelo

+0

Dies war die einzige Lösung, die für mich gearbeitet hat. Danke – Nico

1

Sie könnten 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> 

14

In Ihrem styles.xml, die folgend in AppTheme gesetzt

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

+0

Das funktioniert für mich. –

+0

Wie wäre es ohne AppCompat? – Yar

+0

@Yar Ändern Sie den übergeordneten Stil "myDropDownItemStyle" in den Nicht-AppCompat-Stil. Was ist dein Basisthema? – huangming

3

Mit Stile, die Sie den Hintergrund der Drop-Down ändern und die Elemente Textfarbe

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

Sie können die folgenden Stile in der res/styles.xml definieren, wenn Sie verwenden android.support.v7.widget .Suchansicht. ": AutoCompleteTextViewStyle android" und "android: textAppearanceSearchResultTitle"

<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 Standardsuche verwenden, sollten die Attribute sein. Ich habe eine post geschrieben, die Details darüber beschreibt.

+0

Ihr Beitrag hat mir sehr geholfen !! – ukama

+0

die einzige Lösung, die auf Android 4.2 funktioniert. Vielen Dank! – Pablo

+0

Arbeitete für mich und der Blog-Post ist nett und prägnant, danke! – henry000