在Android中,搜索是一个非常核心的功能,我们可以通过它搜索到任意我们可以获得的信息。这些信息可以是存储在手机中的联系人、文件等信息,也可以是在网络上的资源。

Android为了给用户提供良好的搜索体验,特意提供了一个搜索框架来方便开发者在自己的App中集成搜索功能。那么接下来我就学习一下这个搜索框架。

在Android的搜索框架中为我们提供了两种搜索的UI控件,它们分别是:

  • Search Dialog

Search Dialog就是浮动在Activity上方的,由系统管理的搜索控件。它不参与Activity的生命周期。

  • Search Widget

Search Wiget这是一个类似于EditView的控件,你可以将它随意摆放在任意你需要的位置。

这里我们主要学习Search Dialog的使用方法,Search Widget的使用方法读者可以在http://developer.android.com/guide/topics/search/index.html中学习,有什么问题也可以跟我讨论。

要使用Search Dialog,我们需要准备一下三个东西:

  1. A searchable configuration  这是一个xml的配置文件searchable.xml,并将其放在res/xml下
  2. A searchable activity 这是一个Activity,作用是用来处理用户输入的搜索关键字
  3. A search interface 这是一个搜索控件提供的接口,对于Search Dialog它提供的接口是onSearchRequested

根据以上三点,我们开始编写一个简单的包含搜索功能的App

1.编写searchable configuration

searchable.xml文件内容如下,并将其放入工程的res/xml下面

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

app_label一般指定App的名字,使用简单的搜索功能时app_label是不可见的,只有将你的搜索功能加入到quick search box的时候,才会在quick search box的可搜索列表中出现。

search_hint就是当我们没有任何输入是出现在Search Dialog上的字符串

2.创建一个Searchable Activity

假设我们创建的Activity的名称为SearchableActivity,那么在AndroidManifest中的配置如下:

<application ... >
<activity android:name=".SearchableActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
...
</application>

其中android:name="android.app.searchable"告诉Android系统,SearchableActivity这个界面对android.intent.action.SEARCH敏感。

android:resource="@xml/searchable"则是来指定我们在第一步中的配置文件。

3.调用搜索接口并处理用户输入

上面我们只定义了一个处理搜索关键字的界面,接下来我们还要定义一个调用搜索接口的界面:

这里为了简单期间,我只是在App的第一个界面MainActiviy中添加一个按钮,然后通过按钮来调用Search Dialog的搜索接口。

MainActiviy.onCreate

    private Button button ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button) ;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSearchRequested() ; //Search Dialog的调用接口
}
});
}

MainActiviy对应的AndroidManifest配置

       <activity
android:name=".MainActivity"
android:label="@string/app_name" >
<meta-data android:name="android.app.default_searchable"
android:value=".SearchableActivity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

其中

<meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" />指定了MainActivity调用Search Dialog的权利,并且指定了搜索处理界面SearchableActivity。

 

这里当点击MainActivity上的button的时候,就会调用onSearchRequested(),来激活Search Dialog。接着当我在Search Dialog中输入一些关键字并按确定时,系统会替我们发送一个包含了搜索关键字的Intent来启动SearchableActivity这个界面。所以只要在SearchableActivity的onCreate方法中获取intent,接着获取搜索关键字,就能对其进行处理了。

SearchableActivity.onCreate

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); Intent intent = getIntent() ;
if(Intent.ACTION_SEARCH.equals(intent.getAction())){
String query = intent.getStringExtra(SearchManager.QUERY) ; //获取用户输入的关键字
 Toast.makeText(this,"the query key is " + query,Toast.LENGTH_LONG).show(); //弹出用户输入的关键字,模拟搜索处理
} }

完成以上三步后,一个简单的搜索Demo就做好了。效果图如下:

MainActivity进行搜索

SearchableActivity处理关键字

源码下载http://pan.baidu.com/s/1o6DTcs6

Android搜索控件的基本使用方法的更多相关文章

  1. android 基础控件(EditView、SeekBar等)的属性及使用方法

        android提供了大量的UI控件,本文将介绍TextView.ImageView.Button.EditView.ProgressBar.SeekBar.ScrollView.WebView ...

  2. Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入数字长度

    Android AutoCompleteTextView 控件实现类似被搜索提示,效果如下 1.首先贴出布局代码 activity_main.xml: <?xml version="1 ...

  3. Android 开源控件与常用开发框架开发工具类

    Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...

  4. Android基本控件之Menus

    在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...

  5. 矩阵, 矩阵 , Android基础控件之ImageView

    天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原 ...

  6. Android给控件添加触摸回调

    Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...

  7. Android 基本控件相关知识整理

    Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...

  8. C#基础视频教程3.1 常见控件类型和使用方法

    可以从左侧的工具箱中找到常见的控件(你要在Form1这种窗体上)   为了方便你也可以把工具箱整个拖过去,这样从上到下控件都给你排好了   对于按钮来说,最常见的就是他的背景颜色,文字,字体,还有是否 ...

  9. 【Android开发日记】之入门篇(十三)——Android的控件解析

    Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件. 一.An ...

随机推荐

  1. centos7(vmware install) 安装EMQ注意事项 ---控制台远程访问

    若想远端访问控制台,需打开对于端口 TCP 服务端口占用 EMQ 2.0 消息服务器默认占用的 TCP 端口包括: 1883 MQTT 协议端口 8883 MQTT/SSL 端口 8083 MQTT/ ...

  2. mongodb - Replication Set成员维护

    1.添加复制集成员 ybb:PRIMARY> rs.add("cc.example.com:27020") { "ok" : 1 } ybb:PRIMAR ...

  3. 纯CSS弹出层,城市切换效果

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  4. hdu_2817_高速幂

    水~ #include <cstdio> #include <iostream> #include <cstring> #include <algorithm ...

  5. 远程调试 Weinre

    什么是远程调试? 说白了,就是可以通过PC端[F12开发者工具]查看并调试移动端的页面内容,如html.css.js.Network资源等. 重要的事情说三遍:weinre所占有的端口不需要和监听页面 ...

  6. Eclipse添加中文语言包与下载

    从Eclipse官网下载最新版本的Eclipse都是英文版的,不自带语言包.现在Eclipse有一个语言包项目,叫Eclipse Babel Project.如果需要语言包,可以联机从这儿下载. Ba ...

  7. Atitit.预定义变量与变量预处理器

    Atitit.预定义变量与变量预处理器 1. 预定义变量与1 2. 变量预处理器1 3. 测试数据生成器3 1. 预定义变量与 姓名:$name 次数:$rdm 时间:$datetime 文件名:$f ...

  8. redis源码学习_字典

    redis中字典有以下要点: (1)它就是一个键值对,对于hash冲突的处理采用了头插法的链式存储来解决. (2)对rehash,扩展就是取第一个大于等于used * 2的2 ^ n的数作为新的has ...

  9. matlab hornerDemo

    % a quick demo of Horner's method and its effects clear all close all % first a comparison of ways t ...

  10. 【积累】javascript tips代码段

    1.json转字符串 function json2str(o) { var arr = []; var fmt = function (s) { if (typeof s == 'object' &a ...