更改 SearchView 上的工具栏颜色/样式单击

Posted

技术标签:

【中文标题】更改 SearchView 上的工具栏颜色/样式单击【英文标题】:Change Toolbar color/style on SearchView click 【发布时间】:2016-04-04 02:51:27 【问题描述】:

我有一个简单的问题。

点击搜索图标时如何将工具栏的颜色/或主题更改为白色?

每当单击搜索图标时,我希望工具栏为白色(带有黑色/灰色后退箭头)。我在 MenuItem 中添加了 SearcView (android.support.v7.widget.SearchView)

这个

当点击返回按钮时,工具栏颜色会变回原来的颜色。

【问题讨论】:

也许你可以给SearchView添加一个监听器,当它展开时,改变Toolbar的颜色。 在点击搜索图标时使用搜索视图打开带有白色编辑文本的可搜索活动希望你已经阅读了这个developer.android.com/guide/topics/search/search-dialog.html 我看到了那个链接,但它与我所问的无关。 【参考方案1】:

Activity/Fragment代码中:

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_menu, menu);

    MenuItem searchMenuItem = menu.findItem(R.id.search);
    if (searchMenuItem == null) 
        return true;
    

    searchView = (SearchView) searchMenuItem.getActionView();
    MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() 

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) 
            // Set styles for expanded state here
            if (getSupportActionBar() != null) 
                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.RED));
            
            return true;
        

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) 
            // Set styles for collapsed state here
            if (getSupportActionBar() != null) 
                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.BLUE));
            
            return true;
        
    );

    return true;

而实际menu的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/search"
        android:title="@string/search_title"
        android:icon="@drawable/ic_menu_search"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

要更改展开视图的后退/X 按钮的颜色,请将其添加到您的样式中:

<item name="colorControlNormal">@color/my_great_color</item>

要使颜色变化更平滑 - 您可以对其进行动画处理:Animate change of view background color on Android

希望对你有帮助

【讨论】:

谢谢!你提到的是部分工作。后退箭头虽然存在但不可见,但后退箭头和背景颜色相同 @FaizanMubasher 添加了屏幕截图 - 后退箭头保持不变,绝对可见。不过,您始终可以按照以下提示更改它的颜色:***.com/questions/26788464/…(也在 onMenuItemActionExpand 和 onMenuItemActionCollapse 中) 你是对的!实际上,我正在将颜色从 Blue 更改为 White,这就是为什么后退箭头似乎不可见的原因。此外,SearchView 中的文本颜色也是白色的。无论如何,谢谢。 它不工作兄弟。后退箭头图标颜色不变。 @FaizanMubasher 我的错 - 我找到了一个可行的解决方案 - 将 &lt;item name="colorControlNormal"&gt;@color/my_great_color&lt;/item&gt; 添加到您的样式中。 (更新了答案)

以上是关于更改 SearchView 上的工具栏颜色/样式单击的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 操作栏中设置 SearchView 的样式

SearchView 中的自定义光标颜色

更改操作栏searchview提示文本颜色

在 searchview 中键入时如何更改 listview-cursoradapter 中搜索文本的背景颜色?

选中和取消选中 Qt 上的 QRadioButton 颜色更改

在 ExtJS 中,如何禁用悬停在禁用工具栏按钮上的样式更改?