Android SearchView使用详解及示例源码


一、概述
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" ;
< 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 ;
}
});



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值