热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Android开发]Android搜索框

在res-xml中新建一个searchable.xml




  1. 在res-xml中新建一个searchable.xml


    android:label="@string/sms_search"
    android:hint="@string/sms_search"
    android:searchSuggestAuthority="com.charon.MyProvider"//自定义的Provider
    android:searchSuggestSelection=" ?" >



  2. 创建一个搜索的Activity,并且在清单文件中进行配置,这个Activity就是点击搜索结果后的页面(显示搜索结果的Activity)





    android:name="android.app.searchable"
    android:resource="@xml/searchable" />

    在这个Activity中的内容要这样

    Intent intent = getIntent();
    //如果是从搜索开启的这个页面就获取到搜索框中输入的内容
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    //获取到在搜索框中输入的内容
    String query = intent.getStringExtra(SearchManager.QUERY);
    //执行搜索的方法
    doMySearch(query);
    Log.i("i", " query " + query);
    }


  3. 如何实现在输入框中输入内容后下面就立马提示相应的搜索结果呢?要通过Provider来操作

    public class MyProvider extends SearchRecentSuggestionsProvider {
    //指定查询的authority
    public final static String AUTHORITY = "com.charon.MyProvider";
    //指定数据库的操作是查询的方式
    public final static int MODE = DATABASE_MODE_QUERIES;
    public MySuggestionProvider() {
    setupSuggestions(AUTHORITY, MODE);
    }
    //然后重写SearchRecentSuggestionsProvider中的方法,有增删改查四个方法
    private final static String[] sms_projection = new String[]{Sms._ID,Sms.ADDRESS,Sms.BODY};
    private final static String[] columnNames = new String[]{BaseColumns._ID,
    SearchManager.SUGGEST_COLUMN_TEXT_1, //指定搜索自动提示的框的样式
    SearchManager.SUGGEST_COLUMN_TEXT_2,
    SearchManager.SUGGEST_COLUMN_QUERY}; //这个参数能够让点击某个搜索提示的时候自动让搜索内容变成点击的条目的内容
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
    String[] selectionArgs, String sortOrder) {
    if(selectionArgs != null){
    String query = selectionArgs[0];
    if(TextUtils.isEmpty(query)){
    return null;
    }
    Uri uri1 = Sms.CONTENT_URI;
    String where = Sms.BODY + " like '%" + query + "%'";
    Cursor cursor = getContext().getContentResolver().query(uri1, sms_projection, where, null, Sms.DATE + " desc ");
    return changeCursor(cursor);
    }
    return null;
    }
    private Cursor changeCursor(Cursor cursor){
    MatrixCursor result = new MatrixCursor(columnNames);
    if(cursor != null){
    while(cursor.moveToNext()){
    Object[] columnValues = new Object[]{cursor.getString(cursor.getColumnIndex(Sms._ID)),
    cursor.getString(cursor.getColumnIndex(Sms.ADDRESS)),
    cursor.getString(cursor.getColumnIndex(Sms.BODY)),
    cursor.getString(cursor.getColumnIndex(Sms.BODY))}; //点击时候让内容变为短信内容
    result.addRow(columnValues);
    }
    }
    return result;
    }
    }


  4. 为了让不管在哪个界面只要点击手机的搜索键都能够弹出我们的搜索(全局搜索),需要在Application节点中去配置下面的meta-data


    android:name="android.app.default_searchable"
    android:value=".SearchableActivity" />


  5. 在Activtity中有一个onSearchRequested方法,执行此方法时能够激活搜索框,所以在点击搜索按钮时执行此方法即可




推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 在开发app时,使用了butterknife后,在androidStudio打包apk时可能会遇到报错。为了解决这个问题,可以通过打开proguard-rules.pro文件进行代码混淆来解决。本文介绍了具体的混淆代码和方法。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 开发笔记:(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 近来有一个需求,是需要在androidjava基础库中插入一些log信息,完成这个工作需要的前置条件有编译好的android源码具体android源码如何编译,这 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • 配置交换机监控端口
    实验环境实验目标1.配置监视端口监视2.端口12 ... [详细]
author-avatar
幸福的哈瑞宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有