你的位置:首页 > 操作系统

[操作系统]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  这是一个
  2. A searchable activity 这是一个Activity,作用是用来处理用户输入的搜索关键字
  3. A search interface 这是一个搜索控件提供的接口,对于Search Dialog它提供的接口是onSearchRequested

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

 

1.编写searchable configuration

searchable.

<??><searchable ="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="@/>  </activity>  ...</application>

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

android:resource="@

 

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


跟团去海南旅游多少钱几月去海南旅游最好去海南的旅游团价格去海南旅游必去景点去海南旅游要多少钱笔架山门票价格_辽宁丹东笔架山票价多少钱 康定情歌木格措观赏“双雾堕海”的奇观 洪泽湖图片_江苏洪泽湖景区风景图片欣赏 “火龙之乡”—黄龙溪古镇 上海胶囊旅馆存火灾隐患被叫停 九寨沟民俗风情 北京赴新西兰旅行团未受地震影响 “水之都,商之都”—大阪自由行攻略 去泰国旅游需要签证吗?机票、酒店哪里订比较好? 女孩子去迪拜酒店工作注意事项 马尔代夫哪个岛最好呢?马尔代夫哪个岛是值得一去的? 泰国旅游注意事项? 深圳海洋世界旅游攻略?深圳小梅沙海洋世界哪里好玩?_海洋世界旅游攻略_海洋世界旅游景点 层林尽染万山红遍 陕西最美赏秋地_华山旅游攻略_华山旅游景点 杭州漫生活五部曲 你的脚步走到哪了(组图)_西湖旅游攻略_西湖旅游景点 《加勒比海盗5》将赴澳大利亚昆士兰拍摄_迪士尼旅游攻略_迪士尼旅游景点 MURB820TRR Datasheet MURB820TRR Datasheet 16CTU04PBF Datasheet 16CTU04PBF Datasheet 1N4150 Datasheet 1N4150 Datasheet 肇庆出发去潮汕旅游 肇庆出发去潮汕旅游 肇庆出发去潮汕旅游 肇庆出发去成都旅游 肇庆出发去成都旅游 肇庆出发去成都旅游 肇庆出发去赤道几内亚旅游 肇庆出发去赤道几内亚旅游 肇庆出发去赤道几内亚旅游