ActionBar的搜索功能

使用ActionBar SearchView时的注意点:

首先要吐槽一下Android的官方Guide文档,关于用法讲得不明确,可能是一直没更新的原因吧。

本来照着文档搞了一下,hint死活出不来,也无法跳转到搜索结果Activity。

StackOverflow也有人提出了这个问题,答案说得很明白 - 参考链接

正确用法

  1. AndroidManifest.xml中为提供SearchView的Activity添加meta-data

    <activity
        android:name=".navigation.NavigationActivity"
        android:label="@string/title_activity_navigation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".search.SearchResultActivity" />
    </activity>
    
  2. 在提供搜索结果的Activity中添加为SearchableInfo用的meta-data
    <activity
        android:name=".search.SearchResultActivity"
        android:label="@string/title_activity_search_result"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
         <!--This metadata entry provides further configuration details for searches-->
         <!--that are handled by this activity.-->
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
    
  3. @xml/searchable文件中的android:hint只能使用string.xml中定义的字符串,不能hard-coded
    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_name"
        android:hint="@string/search_hint">
    </searchable>
    
  4. 初始化Menu的时候,获取SearchableInfo
    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    

注意点

SearchManager通过ComponentName查找SearchableInfo的时候,对应Component必须满足一定条件:

  1. intent-filter包含<action android:name="android.intent.action.SEARCH" />
  2. meta-data
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />
    

另一种方法

既然SearchManager是通过ComponentName来获取SearchableInfo,当然可以直接从提供搜索结果的Activity中获取ComponentName


SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
ComponentName cn = new ComponentName("com.liangfeizc.catykanji", "com.liangfeizc.catykanji.search.SearchResultActivity");
searchView.setSearchableInfo(searchManager.getSearchableInfo(cn));

tips

ComponentName构造函数的第一个参数pkg是Application的Package,不是目标类所在的Package。

The first parameter ComponentName(String pkg, String cls) is application package not the package where the activity is.

时间: 2024-11-08 09:02:15

ActionBar的搜索功能的相关文章

ios UISearchDisplayController 实现 UITableView 搜索功能

UISearchDisplayController 是苹果专为 UITableView 搜索封装的一个类. 里面内置了一个 UITableView 用于显示搜索的结果.它可以和一个需要搜索功能的 controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都 封装好了,使用起来非常非常的简单.特别是要实现全屏搜索时使用最多. 全屏搜索的意思是如果你用了  NavigationBar 当点击搜索框时 TableView 会自动弹上去

【转】为Android应用添加搜索功能

为Android应用添加搜索功能 为Android应用增加搜索功能:增加搜索建议

Yii 1开发日记 ----------- 搜索功能及Checkbox的实现

用yii 1实现后台的搜索功能,效果如下图: 1.模型中: 1 public function search() 2 { 3 4 $criteria = new CDbCriteria; 5 //独立高级搜索 6 if(isset( $_GET['goods']) ) { 7 //商品货号 8 if (isset($_GET['goods']['goods_sn']) && $_GET['goods']['goods_sn'] != "") 9 { 10 $criter

ILSpy搜索功能加强版

1.修改搜索功能,增加如下的额外搜索选项 A.按文本搜索(默认选项) B.按通配符搜索 C.按正则表达式搜索 2.搜索增加如下特性: A.可以按照名字空间检索特定名字空间下的所有类. B.修正了官方版本无法搜索泛型类型的功能. 警告: A.此版本为非官方版本. B.本软件为第三方修改软件,此软件的著作权及版权归原作者所有. C.原软件的任何版权声明及相关权益声明同样适用于本软件. 下载地址: https://onedrive.live.com/?cid=e0560144122a3b9d&id=E

ThinkPHP之中getlist方法实现数据搜索功能

自己在ThinkPHP之中的model之中书写getlist方法,其实所谓的搜索功能无非就是数据库查询之中用到的like  %string%,或者其他的 字段名=特定值,这些sql语句拼接在and语句之中: HTML之中: 1 <form action="" method="get"> 2 <table class="account_table" width="100%" cellpadding="

Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/12684155 前段时间因为换工作的缘故又恰巧碰到国庆节,所以有段时间自己没有更新博客了,过完国庆到新公司报道,感觉还不错,就是现在住的地方离新公司有点远,地铁20站,伤不起啊,我每天早上7点多就要起床,然后屁颠屁颠的去挤地铁上班,晚上下班还要挤地铁,先不说路程远,车费一天就要10几块,我的银子啊,有坐龙华线去上班的深圳程序员不?听说那条线上班高峰期很挤?我没在上班高峰期坐过那趟车,我

第四章:IOS Table表视图搜索功能UISearchBar

UISearchBar经常会跟UITable一齐使用,所以在此就介绍一下UISearchBar 先来看看结构 下面再看看它有哪些样式 基本搜索栏.里面????的Search文字用于提示用户??入查询关??字,搜索栏的Placeholder属性可以设置这个提示信息 带有??除按钮的搜索栏.在??入框中??入文字时,会在后面出现??????除按钮,点????除按钮可以??除??入框中的文字 带有查询结果按钮的搜索栏.显示最??搜索结果,显示设定如图4-31所示,选中 Options下的Shows S

iOS9系列专题二——全新的搜索功能api

更加智能的搜索方案--iOS9搜索功能新api 一.引言 iOS9中为我们提供了许多新的api,搜索功能的加强无疑是其中比较显眼的一个.首先,我们先设想一下:如果在你的app中定义一种标识符,在siri和搜索中,可以用过这个标识符搜索到你的app,是不是很棒?不,这还差得远,你可以定义任意的数据,使其在搜索和siri中可以快速检索到,这样的搜索功能是不是非常酷?不,还有更cool的,你甚至可以在你的网站中添加一些标志,使apple的爬虫可以检索到,那样,即使用户没有安装你的app,也可以在搜索中

创建一个提供搜索功能的搜索类(可运行)

/* * 这段代码的主要功能是对于创建索引的后的文件, * 创建一个提供搜索功能的搜索类. * */ package ch2.lucenedemo.process; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Date; import java.util.Iterator; import jav