Search events

来源:互联网 发布:网络摄像头ip扫描工具 编辑:程序博客网 时间:2024/06/05 22:45

Search events 在android中有两种方法:
1.通过屏幕上方的SearchDialog来交给系统的收搜框架来完成开启相关的activity;
2.通过布局SearchView来通过系统的收搜框架开启相关activity处理收搜事件

系统会创建一个intent并将用户输入的收搜信息储存在intent中,开启通过申明的处理search的activity(searchable activity),并将intent传递给它

search事件处理的方法:


  • 1.创建searchable configuration 文件 res/xml/目录下创建searchable.xml文件
  • 2.在manifest中配置处理search的activity(searchable Activity)

  • 3.在 searchableActivity中处理search 事件
    a.接受传入的search的条件(开启的查询intent中的用户输入的内容)
    String str= getIntent().getStringExtra(SearchManager.QUERY)
    b.查询数据(查询数据库)
    c.先时查询结果(一般在listView中显示)

  • 4.创建search的接口(以上两种方法searchWidget或SearchDialog)
    具体代码参考
    创建SearchDialog接口的方法:
    前面3个步骤都一样,需要在加上一个步骤
在需要跳出SearchDialog的activity的manifest中需配置SearchDialog的元数据(若其本身即是searchableActivity也是弹出SearchDialog的activity则无需配置default_searchable) <activity        android:name=".MainActivity"        android:label="MainActivity">        <meta-data android:name="android.app.default_searchable"                   android:value=".SearchableActivity"/>  </activity> 配置SearchableActivity  <activity       android:label="ThirdActivity"       android:name=".ThirdActivity"       android:parentActivityName=".SecondActivity">       <meta-data                android:name="android.support.PARENT_ACTIVITY"                android:value=".SecondActivity"/>       <intent-filter>                <action android:name="android.intent.action.SEARCH"/>       </intent-filter>       <meta-data android:name="android.app.searchable"                android:resource="@xml/searchable"/>        </activity>然后在代码中点击某个按钮调用onSearchRequested();方法调出SearchDialog 

这里写图片描述activity失去输入焦点,不会对stack造成影响所以不会调用onPause()方法,需要在activity失去输入焦点时做出反应(如游戏暂停等),可以overrides onSearchRequested()方法

语音查询

这里写图片描述点击语音按钮弹出下面的语音录入框
这里写图片描述
在searchable.xml配置文件中添加语音属性

<?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"    android:icon="@drawable/icon1"    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">    <!--showVoiceSearchButton显示语音图标,LauchRecognizer识别语音并自动跳转--></searchable>

提供搜索建议

  • 1.最近查询记录建议
    (1).创建searchableActivity,searchable.xml,search的接口如上述三个步骤
    (2).创建一个ContentProvider继承于SearchRecentSuggestionsProvider并在manifest中声明
    (3).在 Searchable.xml中增加suggestion相关属性
    (4).当用户启动查询后将用户输入的查询类容保存到声明的ContentProvider中
    (5).保护用户隐私,设置清除记录按钮
    历史搜索记录 这里写图片描述
    (当用户输入内容时,系统会自动query配置的contentProvider并返回query结果cursor并显示出来,当输入内容有变动时,系统会重复前面的动作,用户点击了某个suggestion项时,系统直接提交内容开启searchableActivity)
(2)创建最近查询记录的Provider并在manifest中声明public class MySuggestionProvider extends SearchRecentSuggestionsProvider {    public static final String AUTHORITY = "com.example.wendy.notification.MySuggestionProvider";    public static final int MODE = DATABASE_MODE_QUERIES;//MODE是可以|运算的    public MySuggestionProvider() {        setupSuggestions(AUTHORITY, MODE);    }}(3).在searchable.xml中设置suggestion属性<?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"    android:searchSuggestAuthority="com.example.wendy.notification.MySuggestionProvider"    android:searchSuggestSelection=" ?">//“?”前面有一个空格</searchable>(4).将用户输入的搜索内容在searchableActivity中保存到新建的provider中 String content = getIntent().getStringExtra(SearchManager.QUERY);SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);suggestions.saveRecentQuery(content, null);//保存记录,null也可以图(2)中第二行的文字(5).允许用户清除最近查询记录SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);suggestions.clearHistory();//清除记录
  • 2.自定义搜寻建议
    以后再详细补充
    官方文档查看链接

searchable.xml中属性的含义

这里写图片描述

原创粉丝点击