如何自定义 expanded-search-action-item 插入符号的颜色?

How to customize the color of the caret of the expanded-search-action-item?

背景

我对我的小应用程序做了一些调整,以便它更好地遵循 material 设计指南。

问题

我有一个搜索操作项,操作栏是蓝色的,但是单击搜索操作项时,我几乎看不到插入符号(输入文本的位置)。

我想改成白色(比如文字颜色)。

我试过的

我已经尝试查看支持库的代码,搜索允许我自定义插入符号颜色的函数,但我找不到可行的解决方案。

我尝试使用 "searchViewStyle" 作为主题的项目之一,并创建了一个新样式:

<style name="AppTheme.SearchViewStyle" parent="Widget.AppCompat.SearchView">
...

但是我发现 none 似乎适合这个。

奇怪的是,当使用“Theme.AppCompat.Light”而不是“Theme.AppCompat.Light.DarkActionBar”时,插入符号的颜色已更改(变为绿色)。

问题

如何更改搜索操作项(又名 SearchView)的文本插入符号的颜色?


编辑:我发现可以为工具栏设置 "colorControlActivated",例如:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="actionBarTheme">@style/AppTheme.ActionBarTheme</item>
.... 

<style name="AppTheme.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="colorControlActivated">#FFffffff</item>
</style>

似乎有效,但它会影响除搜索项的插入符号以外的其他内容吗?如果有,是哪些?是否可以只影响插入符号?

根据官方设计指南,插入符应使用 android:colorControlActivated 中的引用(colorControlActivatedsupport-v7)着色 (API>21)。正如您所发现的那样,它会自动着色。

colorControlActivated 在几个小部件中默认使用。顾名思义,它将是以下颜色:

  • 一个激活的复选框;
  • 聚焦的 EditText;
  • 选定的单选按钮;

等等。我不记得它用过的所有地方,但如果你设法只将它应用到工具栏,那么除了你放在 Menu 中的小部件(例如 SearchView)之外,它不应该有任何其他应用程序.它可能(不确定)对上下文操作栏有一些影响。

如果您想完全控制插入符号,您还可以提供自己的可绘制对象:

<item name="android:textCursorDrawable">@drawable/my_drawable</item>

这适用于 API>12。