- 新建一个菜单(在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
- 在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;
}
- 这时还是不会显示,需要在Activity.onCreate()中添加Toolbar
setSupportActionBar(mToolbar);