`
zhouYunan2010
  • 浏览: 208440 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类

android中的search dialog

阅读更多
如果你要在你的应用程序中实现搜索功能,android中为用户提供两种搜索的特性:
一种是search dialog,另一种是search widget.
由于search widget要在3.0以上的版本才能使用。这里只讲search dialog
search dialog是由android系统控制的。需要由用户去激活它。并且搜索框只出现在activity的最顶部。当提交查询的数据时,系统会转发给一个activity进行处理。用户也可以保存最近查询的数据。这里讲一下基本的配置。
1.新建一个位于res/xml下的一个searchable.xml的配置文件
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
	<!-- label为搜索框上方的文本,hint搜索框里面的提示文本  -->
	android:label="@string/search_label"
	android:hint="@string/search_hint"
	android:icon="@drawable/search32"
	android:searchMode="showSearchLabelAsBadge"
	
	<!-- 中间是语音搜索配置(看不懂....) -->
	android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
	android:voiceLanguageModel="free_form"
	android:voicePromptText="Invoke Search"
	<!-- 这里的值必须SearchSuggestionSampleProvider.AUTHORITY相同,后面讲 -->
	android:searchSuggestAuthority="SuggestionProvider"	
	android:searchSuggestSelection=" ? ">    
</searchable>


2.新建一个activity:SearchInvoke.java。此activity的作用是用来启动search dialog并把要查询的数据进行转发给另一个activity进行处理。
关键代码:
public class SearchInvoke extends Activity{
	private Button mStartSearch;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.search_invoke);
		//就一个按钮
		mStartSearch = (Button)findViewById(R.id.btn_start_search);
		//启动搜索框
		mStartSearch.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				onSearchRequested();
			}
		});
	}

        //重写onSearchRequested方法
	@Override
	public boolean onSearchRequested() {
               //除了输入查询的值,还可额外绑定一些数据
		Bundle appSearchData = new Bundle();
		appSearchData.putString("demo_key","text");
		
		startSearch(null, false, appSearchData, false); 
                //必须返回true。否则绑定的数据作废
		return true;
	}	

}


3.处理activity--》SearchQueryResults.java
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_query_results);

        //两个TextView进行数据显示
        mQueryText = (TextView) findViewById(R.id.txt_query);
        mAppDataText = (TextView) findViewById(R.id.txt_appdata);

        final Intent queryIntent = getIntent();
        final String queryAction = queryIntent.getAction();
        if (Intent.ACTION_SEARCH.equals(queryAction)) {
            doSearchQuery(queryIntent, "onCreate()");
        }
        else {
            mDeliveredByText.setText("onCreate(), but no ACTION_SEARCH intent");
        }
    }

    /** 
     * Called when new intent is delivered.
       这个方法不知道何时调用。看了文档说在manifest中配置此activity的启动模式为singleTop。不过试了貌似还没有执行到此方法
     */
    @Override
    public void onNewIntent(final Intent newIntent) {
        super.onNewIntent(newIntent);
        Log.i(TAG, "SearchQueryResults-->onNewIntent()");
        // get and process search query here
        final Intent queryIntent = getIntent();
        final String queryAction = queryIntent.getAction();
        if (Intent.ACTION_SEARCH.equals(queryAction)) {
            doSearchQuery(queryIntent, "onNewIntent()");
        }
        else {
            mDeliveredByText.setText("onNewIntent(), but no ACTION_SEARCH intent");
        }
    }

    //处理
    private void doSearchQuery(final Intent queryIntent, final String entryPoint) {

        //获取查询的值  
        final String queryString = queryIntent.getStringExtra(SearchManager.QUERY);
        mQueryText.setText(queryString);

        //保存查询的值,这样在下次搜索的时候会有以前搜索数据的提示
        SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, 
                SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
        suggestions.saveRecentQuery(queryString, null);
        
        //获得额外递送过来的值
        final Bundle appData = queryIntent.getBundleExtra(SearchManager.APP_DATA);
        if (appData == null) {
            mAppDataText.setText("<no app data bundle>");
        }
        if (appData != null) {
            String testStr = appData.getString("demo_key");
            mAppDataText.setText((testStr == null) ? "<no app data>" : testStr);
        }
    }


3.创建类SearchSuggestionSampleProvider.java用户查询数据保存的配置信息
public class SearchSuggestionSampleProvider extends
        SearchRecentSuggestionsProvider {

    final static String AUTHORITY="SuggestionProvider";
    final static int MODE=DATABASE_MODE_QUERIES;
    
    public SearchSuggestionSampleProvider(){
        super();
        setupSuggestions(AUTHORITY, MODE);
    }
}


4.最重要的一步,在AndroidManifest.xml中的配置
<!-- search ui -->
		 <activity android:name="com.zyz.app.SearchQueryResults"
                  android:label="处理查询结果">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                       android:resource="@xml/searchable" />
       	 </activity>
        <!--此activity用来输入并递送结果,meta-data必须配置-->
       	 <activity android:name="com.zyz.app.SearchInvoke">
       	 	<intent-filter>
       	 		<action android:name="android.intent.action.MAIN"/>
       	 		<category android:name="android.intent.category.LAUNCHER"/>
       	 	</intent-filter>
       	 	<meta-data android:name="android.app.default_searchable"
       	 		android:value="com.zyz.app.SearchQueryResults"/>
       	 </activity>
       <!--provider的注册-->
        <provider android:name="com.zyz.app.SearchSuggestionSampleProvider"
                  android:authorities="SuggestionProvider" />


5.无图无真相


  • 大小: 14.4 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Node.js-SearchDialog一个Android搜索对话框库

    【Node.js-SearchDialog:Android搜索对话框库】 在Android应用开发中,用户界面的交互性和易用性是至关重要的。SearchDialog库为开发者提供了一种便捷的方式,以创建美观且功能丰富的搜索对话框,从而增强用户体验...

    使用Dialog实现从页面顶部弹出类似搜索的对话框

    你可以使用`LayoutInflater`来加载这个布局,并通过`setView()`方法将其添加到Dialog中。 为了实现从页面顶部弹出的效果,我们可以利用动画库。在创建Dialog后,为其设置一个向上滑动的入场动画。这可以通过在`...

    SearchDialogDemo

    在Android应用开发中,`SearchDialog`是一种常用的组件,它为用户提供了一个方便的搜索界面,让用户可以快速查找应用内的特定内容。本示例项目“SearchDialogDemo”将展示如何在Android应用中集成并使用`Search...

    Android中显示AlertDialog对话框

    在Android开发过程中,对话框(Dialog)是一种非常常见的UI组件,用于向用户展示重要的提示信息或请求用户做出选择。其中,`AlertDialog`是最常用的一种对话框类型,它提供了丰富的自定义选项来创建不同样式的对话框...

    Android代码-具有内置搜索选项的强大且可自定义的搜索对话框。

    search-dialog An awesome and customizable search dialog with built-in search options. Usage First add jitpack to your projects build.gradle file allprojects { repositories { ... maven { url ...

    易于使用但可自定义的搜索对话框-Android开发

    search-dialog具有内置搜索选项的令人敬畏且可自定义的搜索对话框。 用法首先将jitpack添加到您的项目build.gradle文件中allprojects {存储库{... maven {url search-dialog一个具有内置搜索选项的超棒且可自定义的...

    Android编程经典代码集锦(复制,粘贴,浏览器调用,Toast显示,自定义Dialog等)

    在Android编程中,开发者经常会遇到各种实用的代码片段,这些代码可以帮助我们更高效地完成日常任务。以下是一些Android编程的经典代码集锦,涵盖了复制、粘贴、浏览器调用、Toast显示以及自定义Dialog等功能。 1. ...

    android默认图标列表.pdf

    在Android开发中,图标资源是构建用户界面的重要组成部分,它们为用户提供直观的视觉指示,帮助用户理解和操作应用。本篇文章将详细阐述Android系统中的默认图标资源,并提供如何在应用程序中使用这些图标的示例。 ...

    android很有用的案例

    "android很有用的案例"这个压缩包提供了多个章节的源码,涵盖了Android开发中的关键知识点,非常适合初学者用来提升技能。让我们逐一解析这些章节所涵盖的内容。 1. **Chapter11Server**:这一章涉及到Android应用...

    Android搜索对话框库-Android开发

    SearchDialog Android搜索对话框库设置1.提供gradle依赖关系将其添加到存储库末尾的root build.gradle中:allprojects {存储库{... maven {url'http SearchDialog Android搜索对话框库设置1.提供gradle依赖关系将其...

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

    在Android开发中,SearchManager是一个非常重要的组件,它主要用于实现应用程序内的全局搜索功能。这个功能让用户可以在不离开当前界面的情况下快速查找和访问应用中的数据。本文将深入探讨SearchManager的工作原理...

    android自带的icons图标汇集

    15. 搜索图标:ic_search_category_default 这个图标用于表示搜索分类默认图标。 16. 安全图标:ic_secure 这个图标用于表示安全图标。 17. 弹出框图标:ic_popup_disk_full、ic_popup_reminder、ic_popup_sync ...

    Android 日程管理专家 APP源码.rar

    一个书中的Android编程范例,Android 日程管理专家 APP源码,主要功能有:添加日程、日程管理、日程搜索、功能设置等。创建新日程时的临时数据,只需要年月日三个数据,用来在刚刚进入新建日程界面日把年月日默认...

    Windows上建立AndRoid开发环境.pdf

    本文将详细介绍在Windows系统中搭建Android开发环境所需的步骤与注意事项。 #### 二、所需软件及资源 - **Android SDK**:提供了开发Android应用所需的各种工具和API。 - **JDK (Java Development Kit)**:Java...

    配置Android开发环境

    在Android开发过程中,配置开发环境是至关重要的第一步。本文将详细介绍如何配置Android开发环境,以及如何使用Eclipse IDE创建和调试Android应用。 首先,我们关注的是Eclipse的更新与ADT(Android Development ...

    Android开发入门教程

    在左侧菜单中选择 `Android`。 3. 在主面板中点击 `Browse` 选择 SDK 的安装目录。 4. 点击 `Apply`,然后点击 `OK`。 #### 二、创建第一个Android项目:“Hello, World” 创建一个简单的 “Hello, World” ...

    Android 自定义弹窗附带搜索过滤功能

    在Android开发中,自定义弹窗是常见的交互设计方式,它可以提供更为丰富的用户体验,而添加搜索过滤功能则进一步增强了用户与应用的互动性。本文将深入探讨如何在Android中实现一个自定义弹窗,并集成搜索过滤功能。...

    android开发环境的搭建

    在弹出的窗口中,选择“Search for new features to install”,接着点击“New Remote Site”,在URL栏中输入Android插件的更新地址:https://dl-ssl.google.com/android/eclipse/。确认无误后,点击“OK”,Eclipse...

    Eclipse开发android应用

    - 在列出的更新项目中,找到并选择Android Plugin &gt; Eclipse Integration &gt; Android Development Tools,点击Next。 - 接受许可协议,继续点击Next直至Finish,然后选择Install All进行安装。 - 安装完成后,重启...

Global site tag (gtag.js) - Google Analytics