Android SearchBar 搜索框介绍SearchManager

Android高手过招之浮动搜索框(SearchManager) 该建议在定义菜单项的时候,Andriod 已经默认提供了一些资源,开发者可以使用android.R.drawable.ic_search_category_default作为菜单项的icon,同时使用SearchManager.MENU_KEY作为快捷键。换言之,当用户执行了搜索命令以后,搜索界面就要呈现给用户。最后:上面讲到了将最近的搜索值添加到搜索建议中,但却没有提到如果清理搜索建议中的值,与保存相似,SearchRecentSuggestion对象提供了一个clearHistory()方法。 阅读详情
浮动搜索框的使用其实并不难,而是在于它的配置非常之繁琐,对于它的使用主要是方便开发者对于程序中有搜索业务时,更好的设计UI
SearchManager具体使用步骤如下:
(1)配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件,如默认值、是否有搜索建议或者语音搜索。
  1. <searchable xmlns:android=http://schemas.android.com/apk/res/android
  2.   <!-- label为搜索框上方的文本,hint搜索框里面的提示文本,显示label -->
  3.     android:label="@string/search_label"
  4.     android:hint="@string/search_hint" 
  5.     android:searchMode="showSearchLabelAsBadge"
  6.     
  7.   <!-- 语音搜索配置 -->
  8.     android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
  9.     android:voiceLanguageModel="free_form"
  10.     android:voicePromptText="@string/search_invoke"

  11.     <!-- 配置搜索建议,配置错误将不会显示,这里的searchSuggestAuthority的值必须是
  12.     继承自SearchRecentSuggestionsProvider的完整路径名 -->
  13.    android:searchSuggestAuthority="com.android.cbin.SearchSuggestionSampleProvider"
  14.     android:searchSuggestSelection=" ? "
  15. />
复制代码
(2) manifest.xml配置,搜索结果处理的Activity将出现两种情况,一种是从其他Activity中的search bar打开一个Activtiy
专门处理搜索结果,第二种是就在当前Activity就是处理结果的Activity,先介绍第一种配置:
  1. <activity android:name="SearchResultActivity">
  2.     
  3.         <intent-filter>
  4.             <action android:name="android.intent.action.SEARCH"></action>
  5.         </intent-filter>

  6.      
  7.      <!-- 指定上面的searchable.xml文件 -->
  8.    <meta-data android:resource="@xml/searchable"
  9.          android:name="android.app.searchable"></meta-data>

  10.     </activity>
复制代码
<!-- 为了使每一个Activity都能使用search bar,一定要将这个标签放到启动Activity中,里面的value指定 的是前面的搜索结果Activity--> <meta-data android:name="android.app.default_searchable"
                       android:value=".SearchResultActivity" />
(3)搜索建议在manifest.xml中相关的配置<!--之前searchable.xml中有一个searchSuggestAuthority的值其实和这里的
authorities指向的都是name中所关联的SearchSuggestionSampleProvider,他是一个
SearchRecentSuggestionsProvider的子类-->
<provider android:name="SearchSuggestionSampleProvider"
  android:authorities="com.android.cbin.SearchSuggestionSampleProvider"></provider>
上面authorities指向的都是name中所关联的SearchSuggestionSampleProvider,他是一个
SearchRecentSuggestionsProvider的子类
  1. public class SearchSuggestionSampleProvider extends
  2.         SearchRecentSuggestionsProvider {

  3.     final static String AUTHORITY="com.android.cbin.SearchSuggestionSampleProvider";
  4.     final static int MODE=DATABASE_MODE_QUERIES;
  5.     
  6.     public SearchSuggestionSampleProvider(){
  7.         super();
  8.         setupSuggestions(AUTHORITY, MODE);
  9.     }
  10. }
复制代码
(4)为了能够使用search bar 我们必须重写Activity的onSearchRequested的方法,在界面上启动一个search bar
但是这个动作不会自动触发,必须通过一个按钮或者菜单的点击事件触发;

  1. @Override
  2.     public boolean onSearchRequested(){
  3.         
  4.         String text=etdata.getText().toString();
  5.         Bundle bundle=new Bundle();
  6.         bundle.putString("data", text);
  7.         
  8.         //打开浮动搜索框(第一个参数默认添加到搜索框的值)
  9.         //bundle为传递的数据
  10.         startSearch("mm", false, bundle, false);
  11.         //这个地方一定要返回真 如果只是super.onSearchRequested方法不但
  12.      //onSearchRequested(搜索框默认值)无法添加到搜索框中,bundle也无法传递出去
  13.         return true;
  14.     }
复制代码
(5)接收query和bundle、保存query值(即搜索建议的列表值)

  1. public void doSearchQuery(){
  2.         final Intent intent = getIntent();
  3.         //获得搜索框里值
  4.         String query=intent.getStringExtra(SearchManager.QUERY);
  5.         tvquery.setText(query);
  6.         //保存搜索记录
  7.         SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
  8.                 SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
  9.         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.             }else{
  17.                 tvdata.setText("no data");
  18.             }
  19.         }
  20.     }
复制代码
之前说到了处理结果的Activity将可能出现的两种情况的两种,现在就处理第二种状况,就是假如invoke search bar的Activity同时也是处理搜索结果的Activity,如果按照之前的方式处理则会出现一种情况,搜索一次就实例化一次Activity,当按返回键的时候会发现老是同一个Activity,其实为了使它只有一个实例化对象,只需简单的配置和代码就能实现第一:在处理搜索结果Activity的manifest.xml中添加android:launchMode="singleTop"属性第二:重写Activity的onNewIntent(Intent intent)
  1. @Override
  2.     public void onNewIntent(Intent intent){
  3.         super.onNewIntent(intent);
  4.         //获得搜索框里值
  5.         String query=intent.getStringExtra(SearchManager.QUERY);
  6.         tvquery.setText(query);
  7.         //保存搜索记录
  8.         SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
  9.                 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.             }else{
  18.                 tvdata.setText("no data");
  19.             }
  20.         }
  21.     }
复制代码
相关知识:上面讲到了将最近的搜索值添加到搜索建议中,但却没有提到如果清理搜索建议中的值,与保存相似,SearchRecentSuggestion对象提供了一个clearHistory()方法
  1. private void clearSearchHistory() {
  2.         SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, 
  3.                 SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
  4.         suggestions.clearHistory();
  5.     }
复制代码
忘了上效果图:oye

Android SearchView与DataBinding双向绑定实战指南 SearchView是Android中实现搜索交互的核心组件,其本质是封装了查询输入、状态管理与系统服务集成的复合控件;DataBinding则通过声明式语法将UI状态映射为可观察数据流,实现ViewModel驱动的响应式更新。该技术组合的价值在于规避传统findViewById+TextWatcher方案中的生命周期错位、状态不同步与测试困难等工程顽疾,显著提升搜索功能的可维护性与稳定性。典型应用场景包括电商商品搜索、内容类App的实时检索、支持多语言提示与键盘联动的搜索页重构。本文聚焦SearchVie 阅读详情

相关推荐

Android应用中的搜索框实现指南

SearchManager是Android开发中的一个管理搜索功能的系统服务,它负责帮助用户更方便地进行搜索操作,提高应用程序的用户体验。SearchManager提供了创建和配置搜索接口的框架,并通过与系统搜索对话框集成,使得应用程序能够响应用户的搜索请求。在Android应用中,搜索框是用户与应用进行交互的重要接口之一。它不仅允许用户输入文字,还能通过各种视觉和行为定制来提升用户体验。本章将详细探讨如何在XML布局文件中创建搜索框,并定义其布局与视觉风格。

weixin_32747681的博客 1089

SearchManager使用以及源码解析

getSearchables(int userId, boolean forceUpdate)内部会通过userId判断当前用户是否获取过searchables,如果没有则创建新的searchables对象并调用updateSearchableList()进行数据的初始化操作之后会存入SparseArray mSearchables中。内部会去解析activity中注册的meta-data对象,找到对应的searchable.xml并解析里面的信息。

LingoA的博客 666

Android Search功能全面实现Demo

本文还有配套的精品资源,点击获取 简介:Android应用中的"android sreach demo"是一个展示搜索功能的示例项目,它提供了基本的搜索功能并支持保存与删除搜索记录,方便用户管理查找历史搜索内容。项目深入讲解了关键知识点,包括SearchView使用、Intent处理、搜索服务配置、搜索历史存储、记录删除、快速删除操作、RecyclerView适配器、数据持...

weixin_42504649的博客 1195

第一百七十一回 SearchBar组件

本章回中主要介绍了搜索框的概念和使用方法,并且通过文本结合代码的方式进行了介绍,最后对全文的内容做总结。

talk_8的专栏 1193

Android搜索功能实现:SearchBarDemo项目解读

本文还有配套的精品资源,点击获取 简介:在Android应用开发中,搜索栏是提升用户体验的关键功能。SearchBarDemo是一个基于Java的Android项目,通过演示实现与Google Gmail和Play Store相似的搜索用户界面,向开发者提供了一个直观的学习参考。该项目涉及到了搜索栏组件SearchView的配置、监听事件处理、数据过滤、历史记录管理、自动补...

weixin_42573757的博客 1141

Android代码-MaterialSearchBar

Material SearchBar Android Material Design Search Bar for Android This beautiful and easy to use library will help to add Lollipop Material Design SearchView in your project. See our Wiki How to use to include SearchBar to your project: add this code to the the project level build.gradle file allprojects { repositories { ... maven { url "https://jitpack.io" } } } add the dependency to the the app level build.gradle file dependencies { compile 'com.github.mancj:M

Android内核学习——SearchManager分析

1. 前言 Android系统提供了的一种搜索服务,利用此服务可以实现对系统中的应用、联系人、SMS等进行搜索,也提供转入浏览器中的搜索。Android Develop Blog中有一篇文章赞美了Android搜索功能的强大快捷——《Introducing Quick Search Box for Android》。 SearchManager是搜索服务的入口,可以通过context.get...

willsunforitcast的博客 1242

Material Design的Search Bar控件

作者mancj,源码MaterialSearchBar,又一个Material Design的Search Bar控件。

Android 浮动搜索框(SearchManager)

浮动搜索框的使用其实并不难,而是在于它的配置非常之繁琐,对于它的使用主要是方便开发者对于程序中有搜索业务时,更好的设计UI        SearchManager具体使用步骤如下:        (1)配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件,如默认值、是否有搜索建议或者语音搜索。 java代码:

专注Android开发 1688

STM32与SD卡SPI接口硬件设计:从原理图到调试的完整指南

SPI(串行外设接口)作为一种广泛应用的同步串行通信协议,以其接线简单、驱动成熟的特点,成为连接微控制器与各类外设的经典方案。其工作原理基于主从架构,通过时钟、数据线和片选信号实现全双工通信,在嵌入式系统中具有极高的技术价值,常用于连接传感器、存储设备和显示模块等。在数据存储场景中,SD卡凭借其大容量和便携性成为首选,而通过SPI模式驱动SD卡,则平衡了性能与设计复杂度。本文聚焦于使用Altium Designer进行硬件设计的工程实践,详细解析了STM32微控制器与SD卡通过SPI通信时,电源管理、上拉电

weixin_34101784的博客 555

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3910

详细解读Android中的搜索框—— SearchView

本篇讲的是如何用searchView实现搜索框,其实原理和之前的没啥差别,也算是个复习吧。一、Manifest.xml这里我用一个activity进行信息的输入和展示,配置方式还是老样子,写一个输入框的配置文件,然后写定一个action<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://sch...

weixin_30920853的博客 225

Matterport3D数据集介绍与下载(全网最详细)

Matterport3D数据集介绍与下载(全网最详细)

shannanshouyin的博客 2168

android源码解析 ---- Mms 短信息,如何使用系统浮动搜索框

1.配置search bar的相关信息,位置res/xml/searchable.xml &lt;searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint...

jishublog 111

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7314

Qt项目开发实例 (含源码)

qt教程、qt项目、qt下载、qt项目实战、qt多线程。本文通过分析demo源码,QT实战的方式进行学习,学习路线是以实战为目录,全面的使用自己的学习知识,文章中编写一系列的学习游戏demo,与大家一起分享。

啊渊的专栏 14万+

android内置搜索对话框(浮动搜索)例子

差点忘了,先上图看效果吧: 步骤: (1)配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;searchable xmlns:android="http://schemas.android.com/apk/res/andro...

移动开发记录 122

FCC 首个扫地机器人豁免落地,Matic 凭什么抢先?

Matic获FCC首个扫地机器人豁免,实为提前布局的合规姿态。其产品在美国组装,并采用已认证射频模组,虽未达65%美国成分门槛,但已具备“本土制造”优势。豁免本质是对既有合规状态的确认,而非解救。此举在商业上放大品牌价值,抢占“安全、合规、本土”叙事高地,凸显供应链安全正取代技术标准成为监管核心。未来合规成本将攀升,规则主导权仍在FCC手中。

致力于lidar应用开发 99

android对外提供全局搜索功能

一、本地搜索介绍   1. 全局搜索(QuickSearchBox)介绍: 搜索是Android上的核心用户功能。用户应该能够搜索他们可用的任何数据,无论内容是位于设备还是Internet上。为了帮助用户创建一致的搜索体验,Android提供了一个搜索框架,可帮助您实现对您的应用程序的搜索,当用户单击某一个搜索出来的结果项就会打开相应的应用程序,显示搜索結果的详细信息。 2. 全局搜索(Qu...

longoo12的专栏 3993

第十六篇:Camx IFE 、OPE 各 port口功能定义

需要注意的是,类似 CSLTFEPortIdRawDump 是没有downscale功能的,所以如果遇到fov不正确的问题,可以排除下TFE这边的 output port是否被接到了 CSLTFEPortIdRawDump 上面来。我们知道Camx 的IFE 、OPE有不少的output port,各个port是有哪些功能的呢?老一点的框架平台,采用的TEF、OPE。

233

【全局路径规划模块运动学算法】无人机Kinodynamic A*算法、Kinodynamic RRT*算法(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Kinodynamic A*算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容啃这个Kinodynamic A_star算法,建议先啃一啃高飞fast_planner那篇论文,把理论打好,如果还是比较迷,就先看Dijksta、再看A_star、再看hybrid A_star 三个的流程,因为往上资料比较多,再看这个Kinodynamic A_star算法,流程已经很相像了。如果。

qq_35635374的博客 2602

认知 android.app.SearchManager

SearchManager 的作用是提供对系统搜索服务的访问。要获取到对 Search Manager 的直接访问,只有通过 context.getSystemService(Context.SEARCH_SERVICE),而试图通过初始化 SearchManager,则是行不通的。 从搜索的角度来看,应用可分为三类: unsearchable 类型应用、Query-Search 类型应用和

905

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android---浮动搜索框(SearchManager)

浮动搜索框的使用其实并不难,而是在于它的配置非常之繁琐,对于它的使用主要是方便开发者对于程序中有搜索业务时,更好的设计UI SearchManager具体使用步骤如下: (1)配置search bar的相关信息,新建一个位于res/xml下的一个searchable.xml的配置文件,如默认值、是否有搜索建议或者语音搜索。 代码 <searchable xmlns:an...

amsogu6822的博客 399

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Android+Kotlin】一个SearchBar模板

1. XML代码(感谢Phonograph) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi

qq_38304672的博客 538

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android主活动,从SearchManager活动获取结果到Android中的主活动

用例:活动A是主要活动.而活动B是SearcActivity(SearchManager).活动B是ListActivity,因此无论结果如何,结果都会显示在列表中.用户单击列表后,我想让该列表中的选定项目返回给ActivityA.我做了什么?我可以使用“ onSearchRequested()”在按钮上调用SearchActivity.在ActivityB中,我通过“ setListAdapte...

weixin_34940781的博客 206
上一篇: Android入门:增删改查通讯录
下一篇: Android联系人Contacts详解
xingfeng2010
博客等级 码龄17年 151粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值