zoukankan      html  css  js  c++  java
  • Android搜索控件的基本使用方法

    在Android中,搜索是一个非常核心的功能,我们可以通过它搜索到任意我们可以获得的信息。这些信息可以是存储在手机中的联系人、文件等信息,也可以是在网络上的资源。

    Android为了给用户提供良好的搜索体验,特意提供了一个搜索框架来方便开发者在自己的App中集成搜索功能。那么接下来我就学习一下这个搜索框架。

    在Android的搜索框架中为我们提供了两种搜索的UI控件,它们分别是:

    • Search Dialog

    Search Dialog就是浮动在Activity上方的,由系统管理的搜索控件。它不参与Activity的生命周期。

    • Search Widget

    Search Wiget这是一个类似于EditView的控件,你可以将它随意摆放在任意你需要的位置。

    这里我们主要学习Search Dialog的使用方法,Search Widget的使用方法读者可以在http://developer.android.com/guide/topics/search/index.html中学习,有什么问题也可以跟我讨论。

    要使用Search Dialog,我们需要准备一下三个东西:

    1. A searchable configuration  这是一个xml的配置文件searchable.xml,并将其放在res/xml下
    2. A searchable activity 这是一个Activity,作用是用来处理用户输入的搜索关键字
    3. A search interface 这是一个搜索控件提供的接口,对于Search Dialog它提供的接口是onSearchRequested

    根据以上三点,我们开始编写一个简单的包含搜索功能的App

    1.编写searchable configuration

    searchable.xml文件内容如下,并将其放入工程的res/xml下面

    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_label"
        android:hint="@string/search_hint" >
    </searchable>

    app_label一般指定App的名字,使用简单的搜索功能时app_label是不可见的,只有将你的搜索功能加入到quick search box的时候,才会在quick search box的可搜索列表中出现。

    search_hint就是当我们没有任何输入是出现在Search Dialog上的字符串

    2.创建一个Searchable Activity

    假设我们创建的Activity的名称为SearchableActivity,那么在AndroidManifest中的配置如下:

    <application ... >
        <activity android:name=".SearchableActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                       android:resource="@xml/searchable"/>
        </activity>
        ...
    </application>

    其中android:name="android.app.searchable"告诉Android系统,SearchableActivity这个界面对android.intent.action.SEARCH敏感。

    android:resource="@xml/searchable"则是来指定我们在第一步中的配置文件。

    3.调用搜索接口并处理用户输入

    上面我们只定义了一个处理搜索关键字的界面,接下来我们还要定义一个调用搜索接口的界面:

    这里为了简单期间,我只是在App的第一个界面MainActiviy中添加一个按钮,然后通过按钮来调用Search Dialog的搜索接口。

    MainActiviy.onCreate

        private Button button ;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button)findViewById(R.id.button) ;
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onSearchRequested() ; //Search Dialog的调用接口
                }
            });
        }

    MainActiviy对应的AndroidManifest配置

           <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <meta-data android:name="android.app.default_searchable"
                    android:value=".SearchableActivity" />
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

    其中

    <meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" />指定了MainActivity调用Search Dialog的权利,并且指定了搜索处理界面SearchableActivity。

     

    这里当点击MainActivity上的button的时候,就会调用onSearchRequested(),来激活Search Dialog。接着当我在Search Dialog中输入一些关键字并按确定时,系统会替我们发送一个包含了搜索关键字的Intent来启动SearchableActivity这个界面。所以只要在SearchableActivity的onCreate方法中获取intent,接着获取搜索关键字,就能对其进行处理了。

    SearchableActivity.onCreate

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            Intent intent = getIntent() ;
            if(Intent.ACTION_SEARCH.equals(intent.getAction())){
                String query = intent.getStringExtra(SearchManager.QUERY) ; //获取用户输入的关键字
                 Toast.makeText(this,"the query key is " + query,Toast.LENGTH_LONG).show(); //弹出用户输入的关键字,模拟搜索处理
            }
    
        }

    完成以上三步后,一个简单的搜索Demo就做好了。效果图如下:

    MainActivity进行搜索

     SearchableActivity处理关键字

    源码下载http://pan.baidu.com/s/1o6DTcs6

    博客新地址www.zqlite.com
  • 相关阅读:
    解决流氓软件的工具,做个记录
    目前使用较好的网盘搜索引擎
    网页截图分段保存
    国外统计学课程主页Statistical Books, Manuals and Journals
    notepad++ TextFX替代
    只用 4 个月打造机器学习必备技能,这位工程师成功翻转职涯人生
    时序差分学习
    来自NVIDIA开源的pix2pixHD,将Image-to-Image Translation带到了另一个境界
    关于HTML5,最牛逼的10本书!
    IDEA配置和插件
  • 原文地址:https://www.cnblogs.com/zqlxtt/p/4385570.html
Copyright © 2011-2022 走看看