Android SearchView使用详解及示例源码


一、概述
SearchView是google提供的搜索框视图控件,可以和menu、ToolBar结合一块使用,用来实现头部搜索框。本文主要讲解的内容及效果:  源码地址

Android SearchView使用详解及示例源码_第1张图片

Android SearchView使用详解及示例源码_第2张图片

二、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 ;
}
});



你可能感兴趣的:(Android)