SearchManager具体使用步骤如下:
(1)配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件,如默认值、是否有搜索建议或者语音搜索。
01 |
<searchable xmlns:android=http:
|
03 |
<!-- label为搜索框上方的文本,hint搜索框里面的提示文本,显示label --> |
04 |
android:label= "@string/search_label" |
05 |
android:hint= "@string/search_hint" |
06 |
android:searchMode= "showSearchLabelAsBadge" |
09 |
android:voiceSearchMode= "showVoiceSearchButton|launchRecognizer" |
10 |
android:voiceLanguageModel= "free_form" |
11 |
android:voicePromptText= "@string/search_invoke" |
14 |
<!-- 配置搜索建议,配置错误将不会显示,这里的searchSuggestAuthority的值必须是
|
15 |
继承自SearchRecentSuggestionsProvider的完整路径名 -->
|
17 |
android:searchSuggestAuthority= "com.android.cbin.SearchSuggestionSampleProvider" |
18 |
android:searchSuggestSelection= " ? " |
manifest.xml配置,搜索结果处理的Activity将出现两种情况,一种是从其他Activity中的search bar打开一个Activtiy专门处理搜索结果,第二种是就在当前Activity就是处理结果的Activity,先介绍第一种配置:
01 |
<activity android:name= "SearchResultActivity" >
|
03 |
<action android:name= "android.intent.action.SEARCH" ></action>
|
07 |
<!-- 指定上面的searchable.xml文件 --> |
09 |
<meta-data android:resource= "@xml/searchable" |
11 |
android:name= "android.app.searchable" ></meta-data>
|
14 |
<!-- 为了使每一个Activity都能使用search bar,一定要将这个标签放到启动Activity中,里面的value指定 的是前面的搜索结果Activity--> |
15 |
<meta-data android:name= "android.app.default_searchable" |
16 |
android:value= ".SearchResultActivity" |
搜索建议在manifest.xml中相关的配置
1 |
<!--之前searchable.xml中有一个searchSuggestAuthority的值其实和这里的 |
2 |
authorities指向的都是name中所关联的SearchSuggestionSampleProvider,他是一个 |
3 |
SearchRecentSuggestionsProvider的子类--> |
5 |
<provider android:name= "SearchSuggestionSampleProvider" |
7 |
android:authorities= "com.android.cbin.SearchSuggestionSampleProvider" ></provider>
|
为了能够使用search bar 我们必须重写Activity的onSearchRequested的方法,在界面上启动一个search bar 但是这个动作不会自动触发,必须通过一个按钮或者菜单的点击事件触发;
02 |
public boolean onSearchRequested(){
|
04 |
String text=etdata.getText().toString();
|
05 |
Bundle bundle= new Bundle();
|
06 |
bundle.putString( "data" , text);
|
10 |
startSearch( "mm" , false , bundle, false );
|
接收query和bundle、保存query值(即搜索建议的列表值)
01 |
public void doSearchQuery(){
|
02 |
final Intent intent = getIntent();
|
04 |
String query=intent.getStringExtra(SearchManager.QUERY);
|
05 |
tvquery.setText(query);
|
07 |
SearchRecentSuggestions suggestions= new SearchRecentSuggestions( this ,
|
08 |
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
|
09 |
suggestions.saveRecentQuery(query, null );
|
10 |
if (Intent.ACTION_SEARCH.equals(intent.getAction())){
|
12 |
Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
|
14 |
String ttdata=bundled.getString( "data" );
|
15 |
tvdata.setText(ttdata);
|
18 |
tvdata.setText( "no data" );
|
之前说到了处理结果的Activity将可能出现的两种情况的两种,现在就处理第二种状况,就是假如invoke search bar的Activity同时也是处理搜索结果的Activity,如果按照之前的方式处理则会出现一种情况,搜索一次就实例化一次Activity,当按返回键的时候会发现老是同一个Activity,其实为了使它只有一个实例化对象,只需简单的配置和代码就能实现 第一:在处理搜索结果Activity的manifest.xml中添加android:launchMode="singleTop"属性 第二:重写Activity的onNewIntent(Intent intent)
02 |
public void onNewIntent(Intent intent){
|
03 |
super .onNewIntent(intent);
|
05 |
String query=intent.getStringExtra(SearchManager.QUERY);
|
06 |
tvquery.setText(query);
|
08 |
SearchRecentSuggestions suggestions= new SearchRecentSuggestions( this ,
|
09 |
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
|
10 |
suggestions.saveRecentQuery(query, null );
|
11 |
if (Intent.ACTION_SEARCH.equals(intent.getAction())){
|
13 |
Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
|
15 |
String ttdata=bundled.getString( "data" );
|
16 |
tvdata.setText(ttdata);
|
19 |
tvdata.setText( "no data" );
|
相关知识:上面讲到了将最近的搜索值添加到搜索建议中,但却没有提到如果清理搜索建议中的值,与保存相似,SearchRecentSuggestion对象提供了一个clearHistory()方法
1 |
private void clearSearchHistory() {
|
2 |
SearchRecentSuggestions suggestions =
|
3 |
new SearchRecentSuggestions( this ,
|
4 |
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
|
5 |
suggestions.clearHistory();
|
- 大小: 9.9 KB
分享到:
相关推荐
微信小程序搜索框实现
Ajax搜索框实现代码,自带数据库的,最好在VS2008运行
Android调用系统的浮动搜索框实现搜索功能,压缩包中含有两个实例,和一个文档。里面包含详细的操作步骤
基于SSM框架+solr搜索框架实现的校园二手交易平台源码+数据库 平台开发使用的技术有: 后台:spirng,springmvc,mybaits, 前台:angularjs+bootstrap。 权限控制:shiro 搜索引擎:solr 分布式搜索引擎。 数据库:...
可以实现像百度、搜狗那样的智能搜索框中的样式
利用EditText实现自定义搜索框,实现了搜索的功能,该apk可以安装自己体验。
参见博客https://blog.csdn.net/weixin_44509533/article/details/113447030
资源:安卓搜索框 作者:欧小帅 日期:2016-10-2 语言:android 工具:android studio 功能:适合新手练习学习
react实现的搜索框
昨天我们主要讲了京东首页的基本布局,今天我们主要来逐步实现京东首页的页面顶部、Logo&搜索框。首先我们来看下我们今天将要实现的效果: 下面页面布局详细分析: 1、页面头部分三个部分依次实现:五角星图、收藏...
搜索框并用popuwindow保存历史搜索记录,数据存到sqlite中
仿bilibili搜索框效果
利用jsp脚本语言实现页面搜索,非百度谷歌等搜索
本文实例为大家分享了Android实现搜索框展示的具体代码,供大家参考,具体内容如下 展示效果 代码区 SouActivity public class SouActivity extends AppCompatActivity implements TextWatcher{ @BindView(R.id....
Android顶部(toolbar)搜索框实现的实例详解 本文介绍两种SearchView的使用情况,一种是输入框和搜索结果不在一个activity中,另一种是在一个activity中。 首先编写toolbar的布局文件 toolbar中图标在menu文件下定义...
一:搜索框功能实现 1.在首页做一个搜索框的样式并实现跳转到搜索页面 <icon class=searchcion size='20' type='search'></icon> <input class= disabled placeholder=请输入关键字 value={{searchValue}...
google搜索栏效果的实现代码, 非常容易上手 比较实用!
用于实现允许用户输入一定字符后,显示一个下拉菜单,供用户从中选择,当用户选择某个选项后,按用户选择自动填写该文本框。 该组件继承EditText,所以它支持EditText组件提供的属性,同时,该组件该支持如下功能。...
本文实例讲述了Android编程自定义搜索框实现方法。分享给大家供大家参考,具体如下: 先来看效果图吧~ 分析:这只是模拟了一个静态数据的删除与显示 用EditText+PopupWindow+listView实现的 步骤: 1.先写出搜索框...
使用Ajax+servlet技术模拟搜索框智能提示。