样式 android 在操作栏中搜索视图和下拉列表
Styling android search view and drop down list in actionbar
在我的应用程序中,我有一个显示搜索建议的搜索视图。我希望 dropdown/spinner 和文本为特定颜色。目前我能做的唯一改变是通过以下方式输入文本的文本颜色:
<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>
该应用当前显示的搜索视图结果如下:
我想知道如何更改搜索提示颜色、下拉背景和下拉项文本颜色等部分?
我的目标是 API 19+
经过大量搜索,我能找到的最接近的解决方案如下(感谢 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);
它不是最优雅的,但对我有用。我唯一有待解决的问题是如何更改建议的项目文本颜色。欢迎听到更多关于这个问题的最优解
您可以在 themes.xml 中定义 suggestionRowLayout:
<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>
在您的 styles.xml 中,将以下内容设置为您的 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>
这可以改变下拉项文本的颜色。试一试。
使用样式,您可以更改下拉菜单的背景和项目文本颜色
<!-- 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>
如果您使用 android.support.v7.widget.SearchView,您可以在 res/styles.xml 中定义以下样式。
<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>
如果您使用的是默认 SearchView,则属性应为 "android:autoCompleteTextViewStyle" 和 "android:textAppearanceSearchResultTitle"。我已经写了一篇 post 来描述这方面的细节。
我遇到了同样的问题(白色背景的建议中的白色文本),但所有答案都不适合我。所以我最终通过更改 textColor 的 TextView 的 adapter 属性解决了这个问题,附加到 AutoCompleteTextView:
代码:
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"
...
/>
在我的应用程序中,我有一个显示搜索建议的搜索视图。我希望 dropdown/spinner 和文本为特定颜色。目前我能做的唯一改变是通过以下方式输入文本的文本颜色:
<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>
该应用当前显示的搜索视图结果如下:
我想知道如何更改搜索提示颜色、下拉背景和下拉项文本颜色等部分?
我的目标是 API 19+
经过大量搜索,我能找到的最接近的解决方案如下(感谢 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);
它不是最优雅的,但对我有用。我唯一有待解决的问题是如何更改建议的项目文本颜色。欢迎听到更多关于这个问题的最优解
您可以在 themes.xml 中定义 suggestionRowLayout:
<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>
在您的 styles.xml 中,将以下内容设置为您的 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>
这可以改变下拉项文本的颜色。试一试。
使用样式,您可以更改下拉菜单的背景和项目文本颜色
<!-- 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>
如果您使用 android.support.v7.widget.SearchView,您可以在 res/styles.xml 中定义以下样式。
<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>
如果您使用的是默认 SearchView,则属性应为 "android:autoCompleteTextViewStyle" 和 "android:textAppearanceSearchResultTitle"。我已经写了一篇 post 来描述这方面的细节。
我遇到了同样的问题(白色背景的建议中的白色文本),但所有答案都不适合我。所以我最终通过更改 textColor 的 TextView 的 adapter 属性解决了这个问题,附加到 AutoCompleteTextView:
代码:
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"
...
/>