代码地址如下:
http://www.demodashi.com/demo/12535.html

前言

今天来讲讲searchView的使用,这里讲的searchView是引用android.support.v7.widget.SearchView 下的搜索

主要包括以下知识点:

  1. SearchView 的基本属性
  2. SearchView的基本使用
  3. SearchView结合Menu的使用

一.SearchView的基本属性

demo中涉及一些SearchView的常用属性的使用,下面用一张图表示:

二.项目结构图

其中MainActivity中是讲的SearchView的基本使用,

NextActivity讲的是结合Menu的使用

SearchView设置属性范例如下:

        mSearchView.setIconifiedByDefault(false);//设置搜索图标是否显示在搜索框内
//1:回车
//2:前往
//3:搜索
//4:发送
//5:下一項
//6:完成
mSearchView.setImeOptions(2);//设置输入法搜索选项字段,默认是搜索,可以是:下一页、发送、完成等
// mSearchView.setInputType(1);//设置输入类型
// mSearchView.setMaxWidth(200);//设置最大宽度
mSearchView.setQueryHint("ahdewoi");//设置查询提示字符串
// mSearchView.setSubmitButtonEnabled(true);//设置是否显示搜索框展开时的提交按钮
//设置SearchView下划线透明
setUnderLinetransparent(mSearchView);

SearchView的基本使用在MainActivity代码中已经解释的很清楚了,下面具体讲讲SearchView 结合Menu的使用

三.SearchView结合Menu的使用

这里涉及到Menu的使用与Toobar的结合使用,下面分步讲解

3.1 新建Menu文件夹

选中res文件夹---->右键---->New----->Android resouce directory----->Resouce Type选下拉列表中的menu,点击ok,就在res文件夹下新建了menu文件夹,动图如下:

3.2 在Menu文件夹下建search_view.xml

这里需要注意的是SearchView控件的布控是通过item中的

app:actionViewClass="android.support.v7.widget.SearchView" 实现的代码如下:

<?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"
xmlns:tools="http://schemas.android.com/tools"> <item
android:id="@+id/menu_search"
android:title="搜索"
android:orderInCategory="100"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/> <item
android:id="@+id/scan_local_music"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="100"
android:title="扫描本地音乐"
app:showAsAction="never"
/>
<item
android:id="@+id/select_sort_way"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="100"
android:title="选择排序方式"
app:showAsAction="never"
/>
</menu>
3.3 SearchView在NextActivity中代码需要注意的点
  1. SearchView对象是通过重写AppCompatActivity的onCreateOptionsMenu(Menu menu)方法实现的

    获取SearchView对象范例如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_view, menu);
MenuItem searchItem = menu.findItem(R.id.menu_search);
//通过MenuItem得到SearchView
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); //设置最大宽度
// mSearchView.setMaxWidth();
//设置是否显示搜索框展开时的提交按钮
mSearchView.setSubmitButtonEnabled(true);
//设置输入框提示语
mSearchView.setQueryHint("hint");
//SearchView设置监听
setMenuListener(); return super.onCreateOptionsMenu(menu);
}

2.toobar代替menu布局setSupportActionBar(toolbar);

设置类似下面这样:

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_next); initView();
initData();
setListener();
} private void initView(){
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}

当然,demo中还涉及到SearchView输入监听,关闭,打开的监听事件,设置监听需要在onCreate(Bundle savedInstanceState) 方法中调用setMenuListener();方法,setMenuListener()代码如下:

   /**SearchView设置监听**/
private void setMenuListener(){
//搜索框展开时后面叉叉按钮的点击事件
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
showShortToast("Close:关闭");
return false;
}
});
//搜索图标按钮(打开搜索框的按钮)的点击事件
mSearchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showShortToast("Open:打开");
}
});
//搜索框文字变化监听
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
LogUtil.e(NextActivity.class, "TextSubmit : " + s); showShortToast("搜索了:"+s);
return false;
} @Override
public boolean onQueryTextChange(String s) {
LogUtil.e(NextActivity.class, "TextChange --> " + s);
return false;
}
});
}

具体代码大家可以看demo

四.SearchView运行效果图



SearchView的全面解析

代码地址如下:
http://www.demodashi.com/demo/12535.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

SearchView的全面解析的更多相关文章

  1. Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...

  2. Android ActionBar全然解析,使用官方推荐的最佳导航栏(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc.我翻译之后又做了些加工 ...

  3. (转)Android SearchView 搜索框

    如果对这个效果感觉不错, 请往下看. 背景: 天气预报app, 本地数据库存储70个大中城市的基本信息, 根据用户输入的或通过搜索框选取的城市, 点击查询按钮后, 异步请求国家气象局数据, 得到返回的 ...

  4. 【转】Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  6. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  7. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  8. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

随机推荐

  1. C++嵌套类及对外围类成员变量的访问

    C++嵌套类及对外围类成员变量的访问 在一个类中定义的类称为嵌套类,定义嵌套类的类称为外围类. 定义嵌套类的目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象.这样可以提高类的抽象能 ...

  2. (十二)C语言双指针的常见用法

    1.用作函数的返回值,比较常见的是返回分配的堆内存地址. 下面用一个例子进行说明下: /******************************************************** ...

  3. 自定义topo文件解析

    from mininet.topo import Topo from mininet.net import Mininet from mininet.util import dumpNodeConne ...

  4. 用RegisterHotKey注册系统热键

    函数功能:该函数定义一个系统范围的热键. 函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk): 参数: hWnd:接 ...

  5. poj 3348(凸包面积)

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8063   Accepted: 3651 Description ...

  6. JavaScript 性能优化的小知识总结

    前言 一直在学习 javascript,也有看过<犀利开发 Jquery 内核详解与实践>,对这本书的评价只有两个字犀利,可能是对 javascript 理解的还不够透彻异或是自己太笨,更 ...

  7. js 抽奖小案例

    Luck Draw 在线演示:九宫格抽奖 对九宫格形式的抽奖页面进行了一些简单封装.以后有机会再更新其他形式的抽奖.

  8. 解析转换json xml 集合 ado

    json提取 string str = "[{\"JUDGE_RESULT\":\"B类\",\"JUDGE_RESULT\":\ ...

  9. Linux Shell 参数传递多种方式

    背景 最近编写ansible脚本,需要自动调用之前写好的shell脚本,由于shell脚本中包含了read命令接收用户的手动输入,为了实现ansible脚本的自动运行,不得不将手动输入转换为自动输入. ...

  10. disable enable 所有其他表关联的外键

    Disable: begin for i in (select constraint_name, table_name from user_constraints where constraint_n ...