Android SearchView 样式被覆盖时 SearchView 图标消失

Android SearchView icon disappears when SearchView style is overridden

我的 activity.

的主要内容区域中有一个 SearchView

我需要覆盖 style.xml 文件中的 SearchView 样式(这样我就可以删除 SearchView 的下划线 - )。

但是,当我重写 SearchView 样式时,它的 searchIcon 就从 UI:

中消失了
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="searchViewStyle">@style/MySearchView</item>
    <item name="android:searchViewStyle">@style/MySearchView</item>
</style>

<style name="MySearchView" parent="Widget.AppCompat.Light.SearchView">
    <!-- nothing entered here yet! -->
</style>

我知道我可以为 searchIcon 指定我自己的可绘制对象,但我想使用默认的。

那么如何在不丢失默认 searchIcon 的情况下指定 MySearchView 样式?

更新 #1

我不知道这是否正常,但我也有一个问题,如果我使用 this approach 覆盖按钮样式,那么我的按钮将失去所有填充,因此变得太小:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="buttonStyle">@style/MyButton</item>
    <item name="android:buttonStyle">@style/MyButton</item>
</style>

<style name="MyButton" parent="android:style/Widget.Button">
    <item name="android:textColor">@color/white</item>
    <item name="android:background">@color/red</item>
</style>

这里的问题似乎是使用框架 class,其样式旨在支持 class。与 AppCompat 主题一起使用的正确 SearchView class 是 android.support.v7.widget.SearchView,而不是 android.widget.SearchView.

框架 View 不会寻找为支持 View 定义的属性,因此这些属性的设置将丢失。由于在 SearchView 的构建过程中找不到有效资源,因此将 null 设置为每个图标的图像 ImageButton,这可以解释为什么多个图标似乎随着这种风格消失了。