Android搜索控件的基本使用方法
在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,我们需要准备一下三个东西:
- A searchable configuration 这是一个xml的配置文件searchable.xml,并将其放在res/xml下
- A searchable activity 这是一个Activity,作用是用来处理用户输入的搜索关键字
- 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搜索控件的基本使用方法的更多相关文章
- android 基础控件(EditView、SeekBar等)的属性及使用方法
android提供了大量的UI控件,本文将介绍TextView.ImageView.Button.EditView.ProgressBar.SeekBar.ScrollView.WebView ...
- Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入数字长度
Android AutoCompleteTextView 控件实现类似被搜索提示,效果如下 1.首先贴出布局代码 activity_main.xml: <?xml version="1 ...
- Android 开源控件与常用开发框架开发工具类
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...
- Android基本控件之Menus
在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...
- 矩阵, 矩阵 , Android基础控件之ImageView
天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原 ...
- Android给控件添加触摸回调
Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...
- Android 基本控件相关知识整理
Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...
- C#基础视频教程3.1 常见控件类型和使用方法
可以从左侧的工具箱中找到常见的控件(你要在Form1这种窗体上) 为了方便你也可以把工具箱整个拖过去,这样从上到下控件都给你排好了 对于按钮来说,最常见的就是他的背景颜色,文字,字体,还有是否 ...
- 【Android开发日记】之入门篇(十三)——Android的控件解析
Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件. 一.An ...
随机推荐
- access denied XXXXXXXXXXXX
这个异常是做支付的时候出现的,貌似是没有权限访问之类的,网上查了有N个解决的办法,我写一下我解决的办法吧....... 出现的异常具体: java.security.AccessControlExce ...
- HR问“预期薪资是多少”,这么说能加薪zz
每年过完节,收好上一年的年终奖,身边人就开始蠢蠢欲动,招聘市场也异常火爆,节前各种裁员的新闻,过了个节都变成了“我们还要继续招人”. 年景不好,人才更是成了紧俏货.可现实中,我却发现,优质的人才未必能 ...
- 多线程-Thread与Runnable源码分析
Runnable: @FunctionalInterface public interface Runnable { /** * When an object implementing interfa ...
- Git-git 忽略 IntelliJ .idea文件
$ echo ‘.idea’ >> .gitignore $ git rm -rf .idea $ git add .gitignore
- poj 1636 Prison rearrangement
Prison rearrangement Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 2158 Accepted: ...
- CCNA2.0笔记_VLSM
子网化:把一个大的主类网段,通过借位的方式逻辑划分多个子网段,应用于多个广播域: 做子网划分的时候,子网掩码最多只能到30位,不能再多划(因为至少要保留4个地址,即2个主机位) FLSM(定长子网掩码 ...
- PHP学习笔记(7)验证码优化
php代码,主要把RGB改成随机生成,不是之前固定的七种颜色了: <?php // ob_clean(); header("content-type:image/png"); ...
- Spring中的IOC
在学习spring的时候,最常听到的词应该就是IOC和AOP了,以下,我从我的角度再次理解一下Spring里的IOC和AOP. IOC简单介绍 IoC(InversionofControl):IoC就 ...
- makefile的选项LDFLAGS和LIBS的区别
LDFLAGS是选项,LIBS是要链接的库.都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么. 网上不难搜索到上面这段话.不过“告诉ld怎么吃”是什么意思呢? 看看如下选项: LDF ...
- golang json数组拼接
2016年06月16日 15:38:25 阅读数:2575 标签: golangjson数组 更多 个人分类: golang func main() { a := []byte(`{"P ...