您的位置:首页 > 移动开发 > Android开发

Android SearchView使用详解及示例源码

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





二、SearchView一般应用

1、menu目录下增加菜单项
SearchView是结合menu加入到ToolBar上的,所以要增加菜单项。这里我们在menu目录下增加menu_searchview.xml文件,如下:
<?xml version="1.0"encoding="utf-8"?>
<menuxmlns: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 booleanonCreateOptionsMenu(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 booleanonMenuItemActionExpand(MenuItem item) {
Toast.makeText(MainActivity.this,"案秀云Expand!",
Toast.LENGTH_SHORT).show();
return true;
}

@Override
public booleanonMenuItemActionCollapse(MenuItem item) {
Toast.makeText(MainActivity.this,"案秀云
Collapse!"
, Toast.LENGTH_SHORT).show();
return true;
}
});
2、输入框文字提交和变化事件

也是在onCreateOptionsMenu(Menu menu)方法中执行

searchView.setOnQueryTextListener(newSearchView.OnQueryTextListener()
{
@Override
public booleanonQueryTextSubmit(String query) {
Toast.makeText(MainActivity.this,"提交内容-"
+ query, Toast.LENGTH_SHORT).show();
return true;
}

@Override
public booleanonQueryTextChange(String newText) {
Toast.makeText(MainActivity.this,"输入变化-"
+ newText, Toast.LENGTH_SHORT).show();
return true;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: