使用Android工具栏更改SearchView中的TextColor

使用Android工具栏更改SearchView中的TextColor,android,searchview,android-toolbar,Android,Searchview,Android Toolbar,我有以下问题。我已经将Actionbar设置为使用工具栏,而不是使用API21和appcompat-v7:21。textColorPrimary样式标记配置为使用颜色@android:color/white,因此新的android工具栏中的所有标题都将使用白色文本颜色(目前为止效果良好) 现在我添加了一个SearchView,并设置了一个自定义背景,如下所示: <style name="AppTheme.Base" parent="Theme.AppCompat.Light">

我有以下问题。我已经将Actionbar设置为使用工具栏,而不是使用API21和appcompat-v7:21。
textColorPrimary
样式标记配置为使用颜色
@android:color/white
,因此新的android工具栏中的所有标题都将使用白色文本颜色(目前为止效果良好)

现在我添加了一个SearchView,并设置了一个自定义背景,如下所示:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/action_bar_background</item>
    <item name="colorPrimaryDark">@color/status_background</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="searchViewStyle">@style/SearchViewStyle</item>
</style>

<style name="SearchViewStyle" parent="Widget.AppCompat.SearchView">
    <item name="queryBackground">@drawable/search_background</item>
    <item name="searchIcon">@drawable/icon_search</item>
</style>

@颜色/动作\u栏\u背景
@颜色/状态/背景
真的
假的
@android:彩色/白色
@样式/搜索视图样式
@可绘制/搜索背景
@可绘制/图标搜索
可绘制的
@drawable/search_background
为纯白色矩形。你猜怎么着?由于工具栏中的标题文本颜色为白色,现在SearchView中的文本颜色也为白色,并且SearchView背景为白色矩形,因此用户无法看到正在键入的内容


我的问题是:如何为Android工具栏标题和SearchView文本设置不同的文本颜色?

经过一些研究,我找到了一种安全的方法

深入研究SearchView样式,我找到了用于显示SearchView的布局。在该布局中有一个TextView(您在SearchView中键入的实际字段)


我已经在工具栏上使用API21测试了这段代码,将工具栏标题文本颜色设置为白色,并将SearchView文本颜色设置为黑色,效果非常好。此外,当我们直接访问TextView对象时,我们可以更改提示、可绘制、填充以及与TextView相关的所有内容。

由@David_E提供的解决方案有效,但还有另一种方法。您还可以定义自定义布局:

<style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”>
    <item name="layout">@layout/my_Search_view</item>
</style>

@布局/我的搜索视图

然后,您可以获取默认布局文件,您可以通过名称找到该文件:
abc\u search\u view.xml
,并对其进行修改。

这可以通过使用
ThemeOverlay在xml中完成:

<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="autoCompleteTextViewStyle">@style/Widget.MyApp.AutoCompleteTextView.SearchView</item>
    <item name="searchViewStyle">@style/Widget.MyApp.SearchView</item>
</style>

<style name="Widget.MyApp.AutoCompleteTextView.SearchView" parent="Widget.AppCompat.AutoCompleteTextView">
    <item name="android:textColor">#000</item>
    <item name="android:textColorHint">#5000</item>
</style>

<style name="Widget.MyApp.SearchView" parent="Widget.AppCompat.SearchView">
    <item name="queryBackground">@drawable/search_background</item>
    <item name="searchIcon">@drawable/icon_search</item>
</style>

只需更改或添加一个
android:textcolorPrimary
到您的样式,在某些情况下,您的所有样式。您为该项目选择的任何颜色都将是
搜索视图
文本的颜色。

如果您使用工具栏,请将其添加到工具栏主题@android:color/white。这就是abc_search_view.xml的内容
<style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”>
    <item name="layout">@layout/my_Search_view</item>
</style>
<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="autoCompleteTextViewStyle">@style/Widget.MyApp.AutoCompleteTextView.SearchView</item>
    <item name="searchViewStyle">@style/Widget.MyApp.SearchView</item>
</style>

<style name="Widget.MyApp.AutoCompleteTextView.SearchView" parent="Widget.AppCompat.AutoCompleteTextView">
    <item name="android:textColor">#000</item>
    <item name="android:textColorHint">#5000</item>
</style>

<style name="Widget.MyApp.SearchView" parent="Widget.AppCompat.SearchView">
    <item name="queryBackground">@drawable/search_background</item>
    <item name="searchIcon">@drawable/icon_search</item>
</style>
<android.support.v7.widget.Toolbar
    app:theme="@style/ThemeOverlay.MyApp.ActionBar"
    ... />
<style name="Theme.MyApp" parent="Theme.AppCompat">
    <item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
    ...
</style>