Android开发之核心特性SearchView的开发使用(源代码分享)

在Android上,搜索是一个核心用户特性。用户可以搜索可用的任何数据,不管内容是存促于设备本身或者需要通过网络访问。Android提供了一个搜索框架为用户创建一个一致的搜索体验,可以帮助你实现搜索应用程序。搜索框架提供两种搜索模式:一个搜索对话框(Search Dialog)位于搜索屏幕的顶部或窗口小部件(SearchView),可以将其嵌入到你的布局中。在这两种情况下,Android系统将帮助你搜索实现交付执行搜索的任务给一个特定的Activity。效果如下图所示。

当用户需要执行一个搜索的搜索对话框或搜索小部件,系统创建一个Intent和存储用户Query,然后系统会启动你事先声明的用于执行数据查找的Activity,,使用它进行数据搜寻。总共需要以下三个步骤。

(1)建立一个Search.XML文件在res/xml文件中

一个XML文件,配置一些search dialog或widget的设置。它包括设置特性,比如语音搜索,搜索建议和提示文本搜索框。

<?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>

(2)声明一个SearchActivity

这个Activiy接收搜索用户的数据,并显示搜索结果。特别注意的是为了使调用的Activity找到这个SearchActivity,你必须首先声明Android搜索Activitydao到你的清单文件。如下所示。

<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>

SearchActivity要完成以下三个步骤。1 接收查询 2 搜索您的数据3 展示结果。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);
    handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    handleIntent(intent);
}

private void handleIntent(Intent intent) {
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
}

之前看博客又看到有人说onNewIntent()不知道几时促发的,我研究了下官方文档上面是这么写的。如果我们将android:launchMode设置为“singleTop”,然后SerachActivity接收ACTION_SEARCH intent 会调用 onNewIntent()方法。

(3)建立一个搜索界面

搜索界面包含两种类型SearchDialog和SearchWidget。SerachDialog:默认情况下,搜索对话框隐藏,我们通过调用onSearchRequested()(当用户按搜索按钮)让他显示在屏幕上端,SearchWidget :允许用户将搜索框放在布局的任意位置,但通常需要跟actionbar结合。

搜索界面的Activity也需要在清单文件声明

  <activity android:name=".OtherActivity" ... >
        <!-- enable the search dialog to send searches to SearchableActivity -->
        <meta-data android:name="android.app.default_searchable"
                   android:value=".SearchableActivity" />
    </activity>
    public class OtherActivity extends Activity{
        private Button mStartSearch;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.search_invoke);
            //就一个按钮
            mStartSearch = (Button)findViewById(R.id.btn_start_search);
            //启动搜索框
            mStartSearch.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    onSearchRequested();
                }
            });
        }  

            //重写onSearchRequested方法
        @Override
        public boolean onSearchRequested() {
                   //除了输入查询的值,还可额外绑定一些数据
            Bundle appSearchData = new Bundle();
            appSearchData.putString("demo_key","text");  

            startSearch(null, false, appSearchData, false);
                    //必须返回true。否则绑定的数据作废
            return true;
        }     

    }  
时间: 2025-01-21 20:02:49

Android开发之核心特性SearchView的开发使用(源代码分享)的相关文章

Android开发之手机拍照功能的实现(源代码分享)

Android系统里调用手机拍照的功能有两种方法一种直接调用手机自带的相机另一种就是使用自己做的拍照应用.比如Camera360 一款于各操作系统都有的的功能强大的手机摄影软件:能拍摄出不同风格,不同特效的照片,同时具有云服务和互联网分享功能,全球用户已经超过2.5亿.现在专门的开发一款手机摄影软件肯定没多大意义,已经比不过这些前辈了,我们只需学会如何调用手机自带的摄像机完成拍照并把照片获取过来,为用户提供上传头像,发表图文微博,传送图片的功能即可.完成上述的功能十分的简单,甚至不需要在清单文件

使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享

使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发人员更轻松的打造出功能丰富而且美观的UI界面.开发人员不须要编写复杂的javascript,也不须要对css样式有深入的了解,开发人员须要了解的仅仅有一些简单的html标签.jQuery EasyUI为我们提供了大多数UI控件的使用

Android开发之使用BroadcastReceiver实现开机自动启动(源代码分享)

上一节已经介绍过BroadcastReceiver实现实时监听电量的功能,这节就来介绍一下如果实现开机自动启动的功能,这个比监听电量还简单不少 (1)在清单文件注册权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> (2)实现  BroadcastReceiver接口 package com.example.g04_broadcastreciver04; import

开发者必看|Android 8.0 新特性及开发指南

背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Android 新系统开发者预览版时已给新系统取名为 Android O.自2008 年发布以来, Android 依靠 Google 的生态运作,全球市场份额在2016年底已超过85% .而近几年依靠 Android 发展起来的智能手机厂商不断增加, Android 生态大家庭也正在不断壮大. Androi

Atitit.业务系统的新特性&#160;开发平台&#160;新特性的来源总结

Atitit.业务系统的新特性 开发平台 新特性的来源总结 1.1. 语言新特性(java c# php js python lisp c++ oc swift ruby  go dart1 1.2. 流行lib.frmawork  新特性 jdk clr framework 新特性 (jq   Servlet2 1.3. Ide 新特性( eclipse vs netbea jetbrain2 1.4. Vm  新特性 clr  jvm(jvm好像没有独立的版本号,继承在jdk里面2 1.5.

基于.net开发chrome核心浏览器【一】

原文:基于.net开发chrome核心浏览器[一] 说明: 这是本系列的第一篇文章,我会尽快发后续的文章. 源起 1.加快葬送IE6浏览器的进程 世界上使用IE6浏览器最多的地方在中国 中国使用IE6浏览器最多的地方在企业中 让他们自己去装个chorme太难了 索性开发个浏览器(其实是浏览器的外壳)给他们 用"代码改变世界"是博客园园友的口号 2.一劳永逸的解决浏览器兼容问题 各种浏览器的CSS hack问题再也不用担心了 甚至公司里前端的职位也可以减少几个了 3.更方便的使用更强大的

基于.net开发chrome核心浏览器【二】

原文:基于.net开发chrome核心浏览器[二] 一: 上一篇的链接: 基于.net开发chrome核心浏览器[一] 二: 相关资源介绍: chrome Frame: 让IE有一颗chrome的心,看起来不错,但我没有深入研究这个东西. http://www.google.com/chromeframe?hl=zh-CN&quickenable=true https://developers.google.com/chrome/chrome-frame/ WebKit.Net 已经有一段时间没

Android学习笔记之(一)开发环境搭建

至于说Android是什么之类的俺就不啰嗦了,因为它离我们太近了.直接上手配置环境.对于程序开发员来说,面对一个新的东西,上手莫过于几个东西了:开发包(提供了哪些API).编程语言(用什么语言来编程)和开发环境(包括IDE和Tools),然后就是工程文件结构(源文件.编译生成的文件和资源文件等放在哪)和第一个HelloWorld程序了.呵呵,个人浅见,若有不妥,还望赐教.那这个开发环境的搭建就是这么些个步骤了. Android SDK 提供了开发Android软件必需的API库和开发工具.目前的

Android Google Map v2详解之:开发环境配置

Android Google Map v2详解之:开发环境配置                                       --转载请注明出处:coder-pig 说在前面: 说到地图定位,现在越来越多的社交app都加入了地图和定位的功能模块,用户很多的时候 也会用到这些东东,比如,到外面吃饭,次次吃饭前都要拍下照片发到朋友圈,定个位,然后发条说说, 炫耀一下自己今天吃了什么高大上的东东,炫耀和攀比心理我懂,不过,一次下班去吃饭,看到一妹子 吃饭,拍照+发朋友圈,足足用了大概20