未应用自定义 SearchView 样式

Max*_*her 7 android menu android-layout searchview

我正在尝试SearchView在工具栏中设置自定义样式,但我发现的所有建议解决方案均无效,并且未应用该样式。我正在使用androidx.appcompat.widget.SearchViewSearchView的版本。

styles.xml我为 SearchView 创建了一个自定义样式并将其应用到 AppTheme 但 SearchView 的外观不会改变。我已经尝试了多种不同的风格属性,但没有任何改变。

样式.xml:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="searchViewStyle">@style/CustomSearchViewStyle</item>
    </style>

    <style name="AppTheme.Toolbar" parent="Base.ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="searchViewStyle">@style/CustomSearchViewStyle</item>
    </style>

    <style name="CustomSearchViewStyle" parent="Widget.AppCompat.SearchView">
        <item name="searchIcon">@drawable/ic_custom_search</item>
        <item name="suggestionRowLayout">@layout/custom_search_row</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

菜单.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search_white_24dp"
        android:orderInCategory="100"
        android:title="@string/search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="collapseActionView|ifRoom" />

</menu>
Run Code Online (Sandbox Code Playgroud)

我只想修改最近搜索建议列表中的时钟图标,但未应用自定义样式,我找不到任何其他方法来做到这一点。

编辑 1: 我刚刚将相同的内容添加androidx.appcompat.widget.SearchView到常规布局文件中,然后正确应用了样式。但是当用作actionViewClass在菜单中使用时,样式将被忽略。您知道如何在用作 时也应用样式actionViewClass吗?

Vin*_*nce 2

在您的活动中onCreateOptionsMenu

对于支持库

MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

mSearchView.setMaxWidth(Integer.MAX_VALUE);
ImageView icon = mSearchView.findViewById(androidx.appcompat.R.id.search_button);
icon.setImageResource(R.drawable.ic_action_search);

mSearchView.setMaxWidth(Integer.MAX_VALUE);
ImageView icon = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_button);
icon.setImageResource(R.drawable.ic_action_search); // Here you select your custom icon.
Run Code Online (Sandbox Code Playgroud)

对于安卓X

MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

mSearchView.setMaxWidth(Integer.MAX_VALUE);
ImageView icon = mSearchView.findViewById(androidx.appcompat.R.id.search_button);
icon.setImageResource(R.drawable.ic_action_search); // Here you select your custom icon.
Run Code Online (Sandbox Code Playgroud)