就是实如今顶部这种搜索框。

一、这个搜索框是actionbar上的menu上的一个item.叫SearchView.我们能够先在menu选项里定义好:

bmap_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
>
<item
android:id="@+id/menu_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/action_search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|collapseActionView" />
</menu>

这里showAsAction的collapseActionView 表示同意将searchView扩展到整个actionbar.

二、配置searchble:

Search View 能够看作seachble activity在acionbar 的一种快捷入口的标识。那么我们能够通过配置searchble 配置相关的信息:

在res/xml目录下(假设没有xml目录,就新建一个),新建文件:searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search_label"
android:hint="@string/search_hint"
/>

三、配置AndroidManifest.xml

既然searchview是一个入口标识,那么久须要在AndroidManifest.xml文件中配置过滤:

<activity android:name="cn.com.smartcost.cld.ui.BmapActivity"
>
<intent-filter>
<action android:name="android.intent.action.SEARCH"/> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>

四、searchView 载入searchble 配置信息 :

public boolean onCreateOptionsMenu(Menu menu) {
// 增加含有search view的菜单
MenuInflater inflater = getMenuInflater();
inflater.inflate(menuId, menu);
// 获取SearchView对象
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
if(searchView == null){
Log.e("SearchView","Fail to get Search View.");
return true;
}
searchView.setIconifiedByDefault(true); // 缺省值就是true,可能不专门进行设置,false和true的效果图例如以下,true的输入框更大 // 获取搜索服务管理器
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
// searchable activity的component name,由此系统可通过intent进行唤起
ComponentName cn = new ComponentName(this,SearchResultActvity.class);
// 通过搜索管理器,从searchable activity中获取相关搜索信息,就是searchable的xml设置。假设返回null,表示该activity不存在,或者不是searchable
SearchableInfo info = searchManager.getSearchableInfo(cn);
if(info == null){
Log.e("SearchableInfo",Fail to get search info.");
}
// 将searchable activity的搜索信息与search view关联
searchView.setSearchableInfo(info); return true;
}

五、响应搜索的activity:

public class BmapActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
… …
doSearchQuery(getIntent());
} @Override
protected void onNewIntent(Intent intent) { //activity又一次置顶
super.onNewIntent(intent);
doSearchQuery(intent);
} // 对searchable activity的调用仍是标准的intent,我们能够从intent中获取信息,即要搜索的内容
private void doSearchQuery(Intent intent){
if(intent == null)
return; String queryAction = intent.getAction();
if( Intent.ACTION_SEARCH.equals( intent.getAction())){ //假设是通过ACTION_SEARCH来调用,即假设通过搜索调用
String queryString = intent.getStringExtra(SearchManager.QUERY); //获取搜索内容
… …
} }
… …
}

另外,有几个需求:

1.怎样改变默认搜索框底下的那条横线的颜色,这个看似easy,事实上非常麻烦,假设直接设置背景图片的话,非常可能会造成叠加的情况。网上看了overflow论坛的人的方法,认为都不太理想,有人提出 用反射的方法解决,我也是採用反射的办法:

		try{
Class<?> argClass=searchView.getClass(); Field ownField = argClass.getDeclaredField("mSearchPlate");
//setAccessible
ownField.setAccessible(true);
View mView = (View) ownField.get(searchView);
mView.setBackground(getResources().getDrawable(R.drawable.test));
}catch(Exception e){
e.printStackTrace();
}

可是这种有一个问题,假如你的searchView有一个submit的话,那么不过搜索框底下的那条横线变色了,而submit下的颜色仍然为蓝色。眼下我也找不到submit这个成员变量名叫什么。不知道各位有什么好的办法。

2.默认展开searchView:

非常多人都有这个需求,想默认吧searchView展开,再加点默认文字在上面(不是hint).

这个使用这个展开:

MenuItem searchItem = menu.findItem(R.id.menu_search);
searchItem.expandActionView();

这样设置文字:

searchView.setQuery("ok", false);

假设只这样会吧虚拟键盘也打开,影响体验,关闭虚拟键盘的方法是使searView清除焦点:

searchView.clearFocus();

參考:

谷歌开发文档:http://developer.android.com/training/search/setup.html

恺风的博客 http://blog.csdn.net/flowingflying/article/details/14163401

Android actionbar 搜索框的更多相关文章

  1. android浮动搜索框

    android浮动搜索框的配置比较繁琐,需要配置好xml文件才能实现onSearchRequest()方法. 1.配置搜索的XML配置文件​,新建文件searchable.xml,保存在res/xml ...

  2. Android 系统搜索框(有浏览记录)

    实现Android 系统搜索框(有浏览记录),先看下效果: 一.配置搜索描述文件  要在res中的xml文件加创建sreachable.xml,内容如下: <?xml version=" ...

  3. Android 浮动搜索框 searchable 使用(转)。

    Android为程序的搜索功能提供了统一的搜索接口,search dialog和search widget,这里介绍search dialog使用.search dialog 只能为于activity ...

  4. Android的搜索框SearchView的用法-android学习之旅(三十九)

    SearchView简介 SearchView是搜索框组件,他可以让用户搜索文字,然后显示.' 代码示例 这个示例加了衣蛾ListView用于为SearchView增加自动补全的功能. package ...

  5. Xamarin.Android 制作搜索框

    前段时间仿QQ做了一个搜索框样式,个人认为还不错,留在这里给大家做个参考,希望能帮助到有需要的人. 首先上截图(图1:项目中的样式,图2:demo样式): 不多说直接上代码: Main.axml &l ...

  6. (转)Android SearchView 搜索框

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

  7. Android学习笔记_79_ Android 使用 搜索框

    1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggesti ...

  8. Android ActionBar 使用详解

    ActionBar取代了以前的TitleBar,是一种更加灵活的人机交互方式:ActionBar并不是完全自立门户的一个新兴的东西,而是和3.0以下版本的menu进行了合并整合:so,添加action ...

  9. 详细解读Android中的搜索框—— SearchView

    以前总是自己写的 今天看看别人做的 本篇讲的是如何用searchView实现搜索框,其实原理和之前的没啥差别,也算是个复习吧. 一.Manifest.xml 这里我用一个activity进行信息的输入 ...

随机推荐

  1. ajax动态加载的图标

    http://www.ajaxload.info/ 这个网站可以动态生成ajax加载样式的小图片,git格式,挺不错推荐给大家

  2. HDU 3966 Aragorn&#39;s Story(树链剖分)

    HDU Aragorn's Story 题目链接 树抛入门裸题,这题是区间改动单点查询,于是套树状数组就OK了 代码: #include <cstdio> #include <cst ...

  3. Java学习——何为JNDI

    曾记得在做机房收费系统的时候就接触到了API,由于它的功能非常强大,可是自己对它却不怎么了解.所以当时是又爱又怕.现在,一路走来才明确,事实上它就是一组接口.仅仅要我们去了解它就会发现.它事实上也没想 ...

  4. [置顶] Jsp中的table多表头导出excel文件

    首先引入两份JS:copyhtmltoexcel.js以及 tableToExcel.js /* * 默认转换实现函数,如果需要其他功能,需自行扩展 * 参数: * tableID : HTML中Ta ...

  5. 算法设计与分析——多边形游戏(DP)

    1.问题描述:   给定N个顶点的多边形,每个顶点标有一个整数,每条边上标有+(加)或是×(乘)号,并且N条边按照顺时针依次编号为1~N.下图给出了一个N=4个顶点的多边形. 游戏规则 :(1) 首先 ...

  6. 大数据时代的精准数据挖掘——使用R语言

    老师简介: Gino老师,即将步入不惑之年,早年获得名校数学与应用数学专业学士和统计学专业硕士,有海外学习和工作的经历,近二十年来一直进行着数据分析的理论和实践,数学.统计和计算机功底强悍. 曾在某一 ...

  7. System Request 进入KDB模式过程详解

    0   echo g > /proc/sysrq-trigger   怎么让系统停下来,进入进入KDB循环? 1   需要简单了解下:Linux Magic System Request 2   ...

  8. keyset与entryset

    1.基本概述 Set<Map.Entry<K,V>> entrySet()  返回此映射中包括的映射关系的 set 视图. Set<K>              ...

  9. HttpSession具体解释

    session的机制 http是无状态的协议,客户每次读取web页面时,server都打开新的会话,并且server也不会自己主动维护客户的上下文信息,那么要怎么才干实现会话跟踪呢?session就是 ...

  10. Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good

    引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...