`
jiguansheng
  • 浏览: 127711 次
  • 性别: Icon_minigender_1
  • 来自: 九江
社区版块
存档分类
最新评论

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

 
阅读更多

浮动搜索框的使用其实并不难,而是在于它的配置非常之繁琐,对于它的使用主要是方便开发者对于程序中有搜索业务时,更好的设计UI

SearchManager具体使用步骤如下:

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

代码
<searchable xmlns:android=http://schemas.android.com/apk/res/android
   <!-- label为搜索框上方的文本,hint搜索框里面的提示文本,显示label -->
android:label
="@string/search_label"
android:hint
="@string/search_hint"
android:searchMode
="showSearchLabelAsBadge"
  <!-- 语音搜索配置 -->
android:voiceSearchMode
="showVoiceSearchButton|launchRecognizer"
android:voiceLanguageModel
="free_form"
android:voicePromptText
="@string/search_invoke"
 
<!-- 配置搜索建议,配置错误将不会显示,这里的searchSuggestAuthority的值必须是
继承自SearchRecentSuggestionsProvider的完整路径名 -->
    android:searchSuggestAuthority="com.android.cbin.SearchSuggestionSampleProvider"
android:searchSuggestSelection
=" ? "
/>

(2) manifest.xml配置,搜索结果处理的Activity将出现两种情况,一种是从其他Activity中的search bar打开一个Activtiy

专门处理搜索结果,第二种是就在当前Activity就是处理结果的Activity,先介绍第一种配置:

代码
<activity android:name="SearchResultActivity">

<intent-filter>
<action android:name="android.intent.action.SEARCH"></action>
</intent-filter>
 
     
     <!-- 指定上面的searchable.xml文件 -->
    <meta-data android:resource="@xml/searchable"
          android:name="android.app.searchable"></meta-data>

</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的子类
代码
public class SearchSuggestionSampleProvider extends
SearchRecentSuggestionsProvider {

final static String AUTHORITY="com.android.cbin.SearchSuggestionSampleProvider";
final static int MODE=DATABASE_MODE_QUERIES;

public SearchSuggestionSampleProvider(){
super();
setupSuggestions(AUTHORITY, MODE);
}
}

 

 

(4)为了能够使用search bar 我们必须重写Activity的onSearchRequested的方法,在界面上启动一个search bar

但是这个动作不会自动触发,必须通过一个按钮或者菜单的点击事件触发;

代码
@Override
public boolean onSearchRequested(){

String text
=etdata.getText().toString();
Bundle bundle
=new Bundle();
bundle.putString(
"data", text);

//打开浮动搜索框(第一个参数默认添加到搜索框的值)
//bundle为传递的数据
startSearch("mm", false, bundle, false);
//这个地方一定要返回真 如果只是super.onSearchRequested方法不但
     //onSearchRequested(搜索框默认值)无法添加到搜索框中,bundle也无法传递出去
return true;
}

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

代码
public void doSearchQuery(){
final Intent intent = getIntent();
//获得搜索框里值
String query=intent.getStringExtra(SearchManager.QUERY);
tvquery.setText(query);
//保存搜索记录
SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
suggestions.saveRecentQuery(query,
null);
if(Intent.ACTION_SEARCH.equals(intent.getAction())){
//获取传递的数据
Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
if(bundled!=null){
String ttdata
=bundled.getString("data");
tvdata.setText(ttdata);

}
else{
tvdata.setText(
"no data");
}
}
}

 之前说到了处理结果的Activity将可能出现的两种情况的两种,现在就处理第二种状况,就是假如invoke search bar的

Activity同时也是处理搜索结果的Activity,如果按照之前的方式处理则会出现一种情况,搜索一次就实例化一次Activity,当按返回

键的时候会发现老是同一个Activity,其实为了使它只有一个实例化对象,只需简单的配置和代码就能实现

第一:在处理搜索结果Activity的manifest.xml中添加android:launchMode="singleTop"属性

第二:重写Activity的onNewIntent(Intent intent)

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

 

代码
private void clearSearchHistory() {
SearchRecentSuggestions suggestions
= new SearchRecentSuggestions(this,
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
suggestions.clearHistory();
}

忘了上效果图:oye

 

 

分享到:
评论

相关推荐

    Android---浮动搜索框(SearchManager)(An-Beer工作室)借鉴.pdf

    Android---浮动搜索框(SearchManager)(An-Beer工作室)借鉴.pdf

    浮动搜索框(SearchManager).zip

    浮动搜索框(SearchManager)是计算机编程中一种常见的交互元素,尤其在移动应用和现代网页设计中被广泛应用。它提供了一种便捷的方式,允许用户在界面的任何位置快速输入搜索关键词,无需跳转到专门的搜索页面。在...

    android浮动搜索框(SearchManager).zip

    在Android开发中,SearchManager是一...通过以上步骤,你可以在Android应用中实现一个功能完备的浮动搜索框,充分利用SearchManager提供的强大功能。同时,理解SearchManager的源码有助于你更好地定制和优化搜索功能。

    安卓app开发项目-浮动搜索框(SearchManager)(源码).zip

    本项目聚焦于“安卓app开发项目-浮动搜索框(SearchManager)”,它提供了源码,适合安卓开发的学习者进行毕业设计或者实践。以下是关于这个项目及其相关知识点的详细说明。 1. **浮动搜索框(Floating Search View...

    浮Android项目动搜索框(SearchManager).rar

    这个"浮Android项目动搜索框(SearchManager).rar"压缩包很可能是包含了一个示例项目,用于演示如何集成和自定义SearchManager来创建一个浮动、动态的搜索框。下面将详细介绍SearchManager的工作原理和如何在...

    基于Android的浮动搜索框(SearchManager).zip

    在Android开发中,浮动搜索框(通常称为SearchView或SearchManager)是提供用户搜索功能的重要组件,它允许用户在应用的顶部或者下拉菜单中直接输入关键词进行搜索。本项目"基于Android的浮动搜索框(SearchManager...

    【计算机专业-Andorid项目源码100套之】浮动搜索框(SearchManager)

    在Android开发领域,浮动搜索框(SearchManager)是一种常见的用户界面元素,用于提供高效便捷的搜索功能。在这款计算机专业-Android项目源码100套之“浮动搜索框(SearchManager)”中,我们可以深入学习如何在...

    浮动搜索框(SearchManager).doc.zip

    在本文档中,我们将深入探讨 `SearchManager` 的工作原理以及如何在Android应用中实现一个浮动搜索框。 首先,`SearchManager` 是Android系统提供的一个服务,用于管理系统的全局搜索行为。通过这个服务,开发者...

    浮动搜索框(SearchManager)(实用1).zip

    在Android开发中,浮动搜索框(通常称为SearchView或者SearchManager)是一个常见的组件,用于提供用户友好的搜索体验。这个组件允许用户在应用顶部输入关键词,进行实时搜索,并且能够与系统的全局搜索功能集成。本...

    浮动搜索框(SearchManager)毕业设计—(包含完整源码可运行).zip

    浮动搜索框(SearchManager)是Android开发中一种常见的交互元素,它允许用户在应用界面的顶部或底部方便地输入查询关键词,实现快速搜索。在这个毕业设计项目中,开发者提供了完整的源代码,使得学习者可以深入理解...

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

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

    浮动搜索框(SearchManager).rar

    Android是由Google开发的开源移动操作系统,广泛应用于智能手机、平板电脑、智能电视等设备。它以Linux内核为基础,结合了丰富的应用编程接口(API)和强大的开发工具,支持多种编程语言如Java、Kotlin和C++,为...

Global site tag (gtag.js) - Google Analytics