Android高手过招之浮动搜索框(SearchManager)

本文详细介绍了Android中如何使用SearchManager实现浮动搜索框功能,包括SearchManager的认知、应用场景和处理搜索请求的方式。通过创建searchable.xml配置文件、设置manifest.xml以及处理搜索结果的Activity,展示了SearchManager在应用中的实际操作步骤。
摘要由CSDN通过智能技术生成

最近要在通话记录上实现SearchManager效果,但是Android本身对通话记录不支持这个功能,故希望通过网上的资料可以帮助我更多的理解这个搜索机制。

       一、对SearchManager的认知
       SearchManager 的作用是提供对系统搜索服务的访问。要获取到对SearchManager的直接访问,只能通过context.getSystemService(Context.SEARCH_SERVICE)方式,试图通过初始化SearchManager是行不通的。
       从搜索的角度来看,应用可分为三类:unsearchable类型应用、Query-Search 类型应用和Filter-Search类型应用。大部分应用是属于后两种,不过,即便是第一种类型,应用也支持对搜索的调用。后两种的区分就在于:Query-Search类型应用执行batch-mode搜索,每一个查询字符串都被转化成结果列表;Filter-Search类型应用则提供filter-as-you-type搜索。通常来讲,对基于网络的数据进行Query-Search,对本地数据,则需要Filter Search。
       除非万不得已,所有的应用都要支持调出搜索界面。换言之,当用户执行了搜索命令以后,搜索界面就要呈现给用户。目前,搜索命令通常是定义在菜单栏中名为Search的选项,在一些手机上会是一个特定的搜索键。
       万一,应用属于第一种类型,你还是可以在web search模式下调出搜索界面。按下“搜索”以后,浏览器就会打开。这里需要注意,搜索界面是以浮动窗口(floating window)的形式出现,对activity stack是不会有任何改变的。
       开发者应该考虑清楚采用什么样的方式来处理搜索请求,以下是四种建议:
       1.自行捕获搜索命令,包括搜索按钮和菜单项,直接调用搜索界面。
       该建议在定义菜单项的时候,Andriod 已经默认提供了一些资源,开发者可以使用android.R.drawable.ic_search_category_default作为菜单项的icon,同时使用SearchManager.MENU_KEY作为快捷键。然后调用onSearchRequested()即可 。
       2.提供type-to-search,用户输入任何字符的同时自动启用搜索。
       该建议需要在Activity里,调用setDefaultKeyMode,如下所示:
       // search within your activity
       setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
       // search using platform global search
       setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);
       3.万一应用是unsearchable,则允许通过搜索键(或者搜索菜单性)进行全局搜索。
       该建议就是使用Quick Search Box进行对设备和网络的搜索,有两种方式可供选择。其一:在application或activity中定义search,也就是在mainifest中增加一个meta-data;其二:通过默认实现onSearchRequest()触发全局搜索(也可以通过startSearth(String, boolean, Bundle, boolean))
       4.彻底禁用搜索。
       该建议要覆写 onSearchRequest() 方法,如下所示:
       @Override
       public boolean onSearchRequested() {
             return false;
       }
       当搜索界面出现,原来的activity 就会失去输入焦点;当搜索结束时,会有三种可能的结果:
       1.用户取消了搜索界面,原来的 activity重新获得输入焦点。可以通过setOnDismissListener(SearchManager.OnDismissListener) 和setOnCancelListener(SearchManager.OnCancelListener) 来获取清除搜索界面的事件通知。
       2.如果用户执行了搜索,这就需要切换到另外一个activity来接收和处理search Intent,原来的activity 就可能进入pause 或者stop 状态。
       3.如果用户执行了搜索,并且当前的activity 就是search Intent 的接收者,则需要通过onNewIntent方法来接收消息。

       二、关于SearchManager很好的一个例子
       具体使用步骤如下:
       1.配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件。
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风非37

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值