概述
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复