我是靠谱客的博主 朴素萝莉,最近开发中收集的这篇文章主要介绍Search events,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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中属性的含义

这里写图片描述

最后

以上就是朴素萝莉为你收集整理的Search events的全部内容,希望文章能够帮你解决Search events所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部