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

一、这个搜索框是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. [linux]linux命令学习-netstat

    linux非常多服务都与网络相关.当服务调不通或者是启动port被占用,或者是又是被防火墙挡住的时候,就须要查询网络相关的问题,netstat命令之前仅仅会用一两个參数这里.好好学习一番. 经常使用的 ...

  2. linux学习之四---gdb调试

    在Linux应用程序开发中,最经常使用的调试器是gdb. 一.启动和退出gdb gdb调试的对象是可运行文件,而不是程序的源码.假设要使一个可运行文件能够被gdb调试,那么使用编译器gcc编译时须要增 ...

  3. FindChildControl与FindComponent

    前两天编码遇到了要使用FindChildControl方法获取指定名称的TSpeedButton按钮,结果折腾了半天就是没得结果(基础不扎实,呵呵),于是赶紧搜索了下,补习关于这两个方法的用法. TW ...

  4. 基于visual Studio2013解决C语言竞赛题之1089牛虎过河

        题目 解决代码及点评 /************************************************************************/ /* ...

  5. 消息机4_B

    /******************************************************************** author : Clark/陈泽丹 created : 2 ...

  6. 《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS

    矩阵和图像的操作 (1)cvSetIdentity函数 其结构 void cvSetIdentity(//将矩阵行与列相等的元素置为1.其余元素置为0 CvArr* arr//目标矩阵 ); 实例代码 ...

  7. 一种根据URL参数条件动态生成URL的方法

    最近做了一个产品列表页类似于搜索列表页, 功能比较简单,比搜索页复杂的逻辑在于,生成各个查询条件的URL.我们的链接如下: http://xxx.xxx.xxx/product/list.html?s ...

  8. zipkin分布式链路追踪系统

    基于zipkin分布式链路追踪系统预研第一篇   分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Inf ...

  9. 14.1.1 InnoDB as the Default MySQL Storage Engine

    14.1 Introduction to InnoDB 14.1.1 InnoDB as the Default MySQL Storage Engine 14.1.2 Checking InnoDB ...

  10. 基于visual Studio2013解决面试题之0202上下排

     题目