`

搜索框的实现

 
阅读更多

SearchManager具体使用步骤如下:
(1)配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件,如默认值、是否有搜索建议或者语音搜索。

 

01 <searchable xmlns:android=http://schemas.android.com/apk/res/android
02  
03   <!-- label为搜索框上方的文本,hint搜索框里面的提示文本,显示label -->
04     android:label="@string/search_label"
05     android:hint="@string/search_hint"
06     android:searchMode="showSearchLabelAsBadge"
07  
08   <!-- 语音搜索配置 -->
09     android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
10     android:voiceLanguageModel="free_form"
11     android:voicePromptText="@string/search_invoke"
12  
13   
14     <!-- 配置搜索建议,配置错误将不会显示,这里的searchSuggestAuthority的值必须是
15     继承自SearchRecentSuggestionsProvider的完整路径名 -->
16  
17    android:searchSuggestAuthority="com.android.cbin.SearchSuggestionSampleProvider"
18     android:searchSuggestSelection=" ? "
19 />

  manifest.xml配置,搜索结果处理的Activity将出现两种情况,一种是从其他Activity中的search bar打开一个Activtiy专门处理搜索结果,第二种是就在当前Activity就是处理结果的Activity,先介绍第一种配置:

01 <activity android:name="SearchResultActivity">
02 <intent-filter>
03 <action android:name="android.intent.action.SEARCH"></action>
04 </intent-filter>
05  
06      
07      <!-- 指定上面的searchable.xml文件 -->
08  
09    <meta-data android:resource="@xml/searchable"
10  
11          android:name="android.app.searchable"></meta-data>
12  
13 </activity>
14 <!-- 为了使每一个Activity都能使用search bar,一定要将这个标签放到启动Activity中,里面的value指定 的是前面的搜索结果Activity-->
15 <meta-data android:name="android.app.default_searchable"
16                        android:value=".SearchResultActivity"
17 />

搜索建议在manifest.xml中相关的配置  

1 <!--之前searchable.xml中有一个searchSuggestAuthority的值其实和这里的
2 authorities指向的都是name中所关联的SearchSuggestionSampleProvider,他是一个
3 SearchRecentSuggestionsProvider的子类-->
4  
5 <provider android:name="SearchSuggestionSampleProvider"
6  
7 android:authorities="com.android.cbin.SearchSuggestionSampleProvider"></provider>

为了能够使用search bar 我们必须重写Activity的onSearchRequested的方法,在界面上启动一个search bar 但是这个动作不会自动触发,必须通过一个按钮或者菜单的点击事件触发;  

01 @Override
02     public boolean onSearchRequested(){
03          
04         String text=etdata.getText().toString();
05         Bundle bundle=new Bundle();
06         bundle.putString("data", text);
07          
08         //打开浮动搜索框(第一个参数默认添加到搜索框的值)
09         //bundle为传递的数据
10         startSearch("mm", false, bundle, false);
11         //这个地方一定要返回真 如果只是super.onSearchRequested方法不但
12      //onSearchRequested(搜索框默认值)无法添加到搜索框中,bundle也无法传递出去
13  
14 return
15 true;
16     }

接收query和bundle、保存query值(即搜索建议的列表值)  

01 public void doSearchQuery(){
02         final Intent intent = getIntent();
03         //获得搜索框里值
04         String query=intent.getStringExtra(SearchManager.QUERY);
05         tvquery.setText(query);
06         //保存搜索记录
07         SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
08                 SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
09         suggestions.saveRecentQuery(query, null);
10         if(Intent.ACTION_SEARCH.equals(intent.getAction())){
11             //获取传递的数据
12             Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
13             if(bundled!=null){
14                 String ttdata=bundled.getString("data");
15                 tvdata.setText(ttdata);
16  
17             }else{
18                 tvdata.setText("no data");
19             }
20         }
21     }

之前说到了处理结果的Activity将可能出现的两种情况的两种,现在就处理第二种状况,就是假如invoke search bar的Activity同时也是处理搜索结果的Activity,如果按照之前的方式处理则会出现一种情况,搜索一次就实例化一次Activity,当按返回键的时候会发现老是同一个Activity,其实为了使它只有一个实例化对象,只需简单的配置和代码就能实现 第一:在处理搜索结果Activity的manifest.xml中添加android:launchMode="singleTop"属性 第二:重写Activity的onNewIntent(Intent intent)

01 @Override
02     public void onNewIntent(Intent intent){
03         super.onNewIntent(intent);
04         //获得搜索框里值
05         String query=intent.getStringExtra(SearchManager.QUERY);
06         tvquery.setText(query);
07         //保存搜索记录
08         SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
09                 SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
10         suggestions.saveRecentQuery(query, null);
11         if(Intent.ACTION_SEARCH.equals(intent.getAction())){
12             //获取传递的数据
13             Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
14             if(bundled!=null){
15                 String ttdata=bundled.getString("data");
16                 tvdata.setText(ttdata);
17  
18             }else{
19                 tvdata.setText("no data");
20             }
21         }
22     }

  相关知识:上面讲到了将最近的搜索值添加到搜索建议中,但却没有提到如果清理搜索建议中的值,与保存相似,SearchRecentSuggestion对象提供了一个clearHistory()方法  

1 private void clearSearchHistory() {
2         SearchRecentSuggestions suggestions =
3 new SearchRecentSuggestions(this,
4                 SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
5         suggestions.clearHistory();
6     }
  • 大小: 9.9 KB
分享到:
评论

相关推荐

    微信小程序搜索框实现微信小程序搜索框实现

    本文将详细讲解如何在微信小程序中实现一个功能完备的搜索框组件。 一、基本结构 微信小程序应用的基本结构包括JSON、WXML、WXSS和JS四个部分,对应于配置文件、结构文件、样式文件和逻辑文件。在提供的文件列表中...

    Ajax搜索框实现代码

    Ajax搜索框实现代码,自带数据库的,最好在VS2008运行

    Android调用系统的浮动搜索框实现搜索功能

    本文将详细介绍如何在Android中调用系统的浮动搜索框来实现这一功能,以此来帮助开发者构建高效、直观的搜索界面。 首先,我们要明白系统浮动搜索框(通常称为全局搜索)是Android系统提供的一种全局搜索机制,它...

    智能搜索框实现案例

    本文将深入探讨如何使用C#语言实现一个类似百度或搜狗的智能搜索框功能,包括实时提示、自动补全等特性。 首先,我们需要理解智能搜索框的核心功能。这种搜索框不仅仅是让用户输入查询词,它还提供实时反馈,即当...

    android关键字搜索框

    总之,这个教程资源“关键字搜索框”将引导初学者一步步实现一个完整的Android搜索功能,包括搜索框的集成、事件监听、结果处理和自定义等关键步骤。通过实践,开发者将更深入地理解Android应用中的搜索功能是如何...

    自定义搜索框实现搜索功能

    利用EditText实现自定义搜索框,实现了搜索的功能,该apk可以安装自己体验。

    仿bilibili搜索框效果

    下面我们将深入探讨这一主题,讲解如何实现这样的搜索框效果。 首先,我们要理解Bilibili搜索框的核心特性。Bilibili的搜索框通常具有以下特点: 1. **自动补全**:当用户在搜索框中输入关键词时,系统会提供与...

    JS实现京东首页之页面顶部、Logo和搜索框功能

    昨天我们主要讲了京东首页的基本布局,今天我们主要来逐步实现京东首页的页面顶部、Logo&搜索框。首先我们来看下我们今天将要实现的效果: 下面页面布局详细分析: 1、页面头部分三个部分依次实现:五角星图、收藏...

    react-react实现的搜索框

    在React中实现一个搜索框是常见的前端开发任务,它涉及到组件化、状态管理以及事件处理等核心概念。React是一个流行的JavaScript库,用于构建用户界面,尤其是单页应用程序(SPA)。让我们深入探讨如何在React中创建...

    jsp脚本语言实现页面搜索

    利用jsp脚本语言实现页面搜索,非百度谷歌等搜索

    android顶部(toolbar)搜索框实现代码

    "Android 顶部工具栏搜索框实现代码详解" Android 顶部工具栏搜索框是许多应用程序中常用的功能,今天我们将详细介绍如何实现 Android 顶部工具栏搜索框的代码。 首先,让我们来看一下搜索框的布局。.xml 布局...

    Android实现简单实用的搜索框

    本文实例为大家分享了Android实现搜索框展示的具体代码,供大家参考,具体内容如下 展示效果 代码区 SouActivity public class SouActivity extends AppCompatActivity implements TextWatcher{ @BindView(R.id....

    Android顶部(toolbar)搜索框实现的实例详解

    "Android 顶部(toolbar)搜索框实现的实例详解" Android 顶部(toolbar)搜索框实现的实例详解是一种常见的搜索框实现方式,在 Android 应用程序中非常常见。下面将详细介绍如何实现 Android 顶部(toolbar)搜索框。 ...

    微信小程序 搜索框实现模糊搜索(带模拟数据,js,wxml,wxss齐全)

    在微信小程序中,实现一个搜索框的模糊搜索功能是一项常见的需求。这涉及到用户输入关键词时,后台或前端根据关键词匹配并展示相关数据。本示例提供了完整的js、wxml和wxss代码,使得开发者可以快速理解和应用到自己...

    iOS 使用UITextField自定义搜索框 实现用户输入完之后“实时搜索”功能

    iOS 使用UITextField自定义搜索框 实现用户输入完之后“实时搜索”功能 本文主要介绍了如何使用UITextField自定义搜索框实现用户输入完之后的“实时搜索”功能。在iOS开发中,使用UITextField来实现搜索功能是一种...

    Ajax+servlet实现搜索框智能提示

    在这个"Ajax+servlet实现搜索框智能提示"的主题中,我们将探讨如何利用Ajax技术和Servlet来创建一个实时、动态的搜索框,提供智能的用户输入建议。 首先,让我们了解Ajax的基本原理。Ajax的核心是XMLHttpRequest...

    Qt自定义搜索框代码实现

    在本文中,我们将深入探讨如何使用Qt框架来实现一个自定义的搜索框,这个搜索框具有动态添加提示列表数据的功能。首先,让我们了解Qt是什么。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式系统,...

    android 浮动搜索框

    本篇文章将深入探讨Android中的浮动搜索框实现,并提供相关资源供参考。 一、Android搜索框基础 1. EditText与SearchView:在Android中,基础的文本输入组件是EditText,但为了实现搜索功能,我们通常会使用...

    仿bilibili搜索框效果(三句代码实现),带历史记录,UI可更具自己喜好更改

    本文将深入探讨如何使用三句代码实现一个带有历史记录功能的仿Bilibili搜索框,并结合数据库来存储和检索历史记录。我们将讨论以下几个关键知识点: 1. **搜索框UI设计**:首先,我们需要创建一个符合用户习惯的...

Global site tag (gtag.js) - Google Analytics