您的位置:首页 > 产品设计 > UI/UE

应用中调用系统的搜索UI,Android Search Framework的初步了解

2012-06-19 17:08 495 查看
经过以下几个部分的实现和配置,Android内建的搜索框架就可以在你的应用中方便使用了。

1 在需要显示search ui界面的activity中调用search的代码

/** Handle "search" title-bar action. */

public void onSearchClick(View v) {

onSearchRequested();

}

/** do the search **/

@Override

public boolean onSearchRequested() {

Bundle appDataBundle = new Bundle();

appDataBundle.putString("param1", "test");

startSearch("请输入搜索的关键词", true, appDataBundle, false);

return true;

}

复制代码

2 创建xml/searchable.xml 对search的配置

<?xml version="1.0" encoding="utf-8"?>

<!--

Copyright 2011 xxx Inc.

-->

<searchable xmlns:android="http://schemas.android.com/apk/res/android"

android:label="@string/search_label"

android:hint="@string/search_hint"

<!-- Authority设置成对应provider的全称 -->

android:searchSuggestAuthority="com.xxx.alimobile.util.SearchSuggestionsProvider"

android:searchSuggestIntentAction="android.intent.action.SEARCH"

android:searchSuggestThreshold="0"

android:searchSuggestSelection=" ? " />

复制代码
3 在AndroidManifest.xml中,给处理Search请求的页面加入intent过滤器和searchable配置文件

<activity

android:name=".ui.WebViewActivity"

android:theme="@style/Theme.AliMobile"

android:screenOrientation="portrait"

android:configChanges="orientation|keyboard|keyboardHidden">

<intent-filter>

<action android:name="android.intent.action.SEARCH" />

</intent-filter>

<meta-data

android:name="android.app.searchable"

android:resource="@xml/searchable" />

</activity>

复制代码
4 判断是不是action_search intent事件发起的,然后处理。

if (Intent.ACTION_SEARCH.equals(intent.getAction())) {

String queryString = intent.getStringExtra(SearchManager.QUERY);

strUrl = "http://search1.wap.taobao.com/s/search.htm?q=" + queryString;

}

复制代码

后面还剩下suggestion的配置, 参考此篇技术文章:

http://www.apkbus.com/android-14572-1-1.html

5 SearchSuggestionProvider类,继承自android.content.SearchRecentSuggestionsProvider,直接使用sdk中的简单实现。

import android.content.SearchRecentSuggestionsProvider;

public class SearchSuggestionsProvider extends SearchRecentSuggestionsProvider {

public final static String AUTHORITY = "com.xxx.alimobile.util.SearchSuggestionsProvider";

public final static int MODE = DATABASE_MODE_QUERIES;

public SearchSuggestionsProvider() {

setupSuggestions(AUTHORITY, MODE);

}

}

复制代码

6 在第4步基础上加入保存功能,每次使用搜索后调用provider进行保存搜索的字段。

if (Intent.ACTION_SEARCH.equals(intent.getAction())) {

String queryString = intent.getStringExtra(SearchManager.QUERY);

strUrl = "http://search1.wap.taobao.com/s/search.htm?q=" + queryString;

// SAVE THE SEARCH QUERY

SearchRecentSuggestions suggestions =

new SearchRecentSuggestions(

this, SearchSuggestionsProvider.AUTHORITY,

SearchSuggestionsProvider.MODE);

suggestions.saveRecentQuery(queryString, null);

} else {

strUrl = (String) intent.getExtras().get("goUrl");

}

复制代码
7 AndroidManifest.xml中加入provider声明。

<provider

android:name=".util.SearchSuggestionsProvider"

android:authorities="com.xxx.alimobile.util.SearchSuggestionsProvider">

</provider>

复制代码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: