一、概述
SearchView是google提供的搜索框视图控件,可以和menu、ToolBar结合一块使用,用来实现头部搜索框。本文主要讲解的内容及效果: 源码地址
二、SearchView一般应用
1、menu目录下增加菜单项
SearchView是结合menu加入到ToolBar上的,所以要增加菜单项。这里我们在menu目录下增加menu_searchview.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/magnify"
android
:title=
"action_search"
app
:actionViewClass=
"android.support.v7.widget.SearchView"
app
:showAsAction=
"always|collapseActionView"
/>
menu
>
注意这里
actionViewClass是一般菜单项目没有的,
actionViewClass前的app指明我们的Activity基类为
AppCompatActivity。
2、ToolBar替换ActionBar
对ToolBar的使用和详细介绍可以参考 Android ToolBar使用详解及示例源码文章,这里就不详细介绍了。如果不用ToolBar替换ActionBar下边的菜单项加载也是可以的。
3、菜单项加载
在Activity加载菜单项是通过重写
onCreateOptionsMenu(Menu menu)方法进行的,通过该方法可以得到Menu对象,而SearchView是Menu中item的一个actionView,actionView可以通过MenuItemCompat获取,所以通过Menu对象可以得到SearchView。这样最基本的SearchView已经可以运行展示。
@Override
public boolean
onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.
menu_searchview
, menu);
return super
.onCreateOptionsMenu(menu);
}
三、SearchView基本属性设置
1、一些基本设置
//搜索框内显示搜索图标,默认是不显示的
searchView
.setIconifiedByDefault(
false
);
//改变输入框内提示文字
TextView textView = (TextView)searchView
.findViewById(android.support.v7.appcompat.R.id.search_src_text);
//注意这里是用的setHint不是setText
textView.setHint(
"输入搜索内容"
);
//设置最右侧的提交按钮
searchView
.setSubmitButtonEnabled(
true
);
//也可以改变输入框内提示文字
searchView
.setQueryHint(
"输入搜索
内容
"
);
//默认展开搜索框
searchView.onActionViewExpanded();
2、获取SearchView内的基本组件
获取组件后可以通过组件进行自定义的样式修改,比如更换图标。
//
//输入框文字
(
TextView
) findViewById(R.id.search_src_text);
//右侧提交按钮
(ImageView) findViewById(R.id.search_go_btn);
//右侧关闭按钮(输入文字后出现的x)
(ImageView) findViewById(R.id.search_close_btn);
//语音输入按钮
(ImageView) findViewById(R.id.search_voice_btn);
//输入框内Icon
(ImageView) findViewById(R.id.search_mag_icon);
四、SearchView常用事件
1、展开、收缩监听事件
代码在onCreateOptionsMenu(Menu menu)方法中
MenuItem menuItem=menu.findItem(R.id.
action_search
);
//SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
MenuItemCompat.
setOnActionExpandListener
(menuItem,
new
MenuItemCompat.OnActionExpandListener() {
@Override
public boolean
onMenuItemActionExpand(MenuItem item) {
Toast.
makeText
(MainActivity.
this
,
"案秀云Expand!"
, Toast.
LENGTH_SHORT
).show();
return true
;
}
@Override
public boolean
onMenuItemActionCollapse(MenuItem item) {
Toast.
makeText
(MainActivity.
this
,
"案秀云 Collapse!"
, Toast.
LENGTH_SHORT
).show();
return true
;
}
});
2、输入框文字提交和变化事件
也是在
onCreateOptionsMenu(Menu menu)方法中执行
searchView
.setOnQueryTextListener(
new
SearchView.OnQueryTextListener() {
@Override
public boolean
onQueryTextSubmit(String query) {
Toast.
makeText
(MainActivity.
this
,
"提交内容-"
+ query, Toast.
LENGTH_SHORT
).show();
return true
;
}
@Override
public boolean
onQueryTextChange(String newText) {
Toast.
makeText
(MainActivity.
this
,
"输入变化-"
+ newText, Toast.
LENGTH_SHORT
).show();
return true
;
}
});