在Toolbar中添加一个SearchView

2019-04-24  本文已影响0人  Richile
  1. 新建一个菜单(在res目录下新建menu目录)
    menu_search.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/app_bar_search"
        android:icon="@drawable/ic_search_black_24dp"
        android:title="Search"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="ifRoom"/>

</menu>

这个item不用手写,可以直接在design界面拖入
其中showAsAction有以下值:
1、always:使菜单项一直显示在ToolBar上。
2、ifRoom:如果有足够的空间,这个值会使菜单项显示在ToolBar上。
3、never:使菜单项永远都不出现在ToolBar上,在…的子项中显示。
4、withText:使菜单项和它的图标,菜单文本一起显示。
actionViewClass="android.widget.SearchView"表示点击后显示一个SearchView

  1. 在Activity.onCreateOptionsMenu()中加载这个菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 获取一个带有search的menu
        getMenuInflater().inflate(R.menu.menu_search, menu);
        // 设置SearchView
        MenuItem menuItem = menu.findItem(R.id.app_bar_search);
        if (menuItem != null) {
            // 获取到SearchView(必须在xml item中设置app:actionViewClass="android.widget.SearchView")
            SearchView searchView = (SearchView) menuItem.getActionView();
            searchView.setQueryHint("热门新闻");
            // 在右侧添加提交按钮
            searchView.setSubmitButtonEnabled(true);
            // 根据源码获取子View的id,然后获取子View来设置其属性
            int src_text_id = searchView.getContext().getResources().getIdentifier(
                    "android:id/search_src_text", null, null);
            TextView textView = searchView.findViewById(src_text_id);
            textView.setTextColor(Color.BLUE);
            int layout_id = searchView.getContext().getResources().getIdentifier(
                    "android:id/search_plate", null, null);
            View view = searchView.findViewById(layout_id);
            view.setBackgroundColor(Color.WHITE);
        }
        return true;
    }
  1. 这时还是不会显示,需要在Activity.onCreate()中添加Toolbar
setSupportActionBar(mToolbar);
上一篇下一篇

猜你喜欢

热点阅读