android 系统搜索框的使用及获取输入



 效果如上图:

1。配置文件中 <activity 

            android:label="@string/app_name"
            android:name=".SoftKey" >
            <intent-filter> 
               <action android:name="android.intent.action.SEARCH" /> 
               <category android:name="android.intent.category.DEFAULT" /> 
           </intent-filter> 
             <meta-data android:name="android.app.searchable" 
                      android:resource="@xml/searchable" /> 
            <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=".SoftKey"/>
          
        </activity>

 2 searchable.xml定义 

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/searchHint"
    android:label="@string/searchLabel" />
3 如果当前的Activity就是响应搜索请求的Activity时,会有以下两种情况:

默认情况下,ACTION_SEARCH Intent将会创建一个新的Activity,并调用onCreate()方法,这个新的Activity会显示在最前面,你将同时有两个Activity实例。当你按“返回”键里,会回到没有执行搜索前的一个Activity。

另一种情况是配置了android:launchMode=”singleTop”的Activity,这时,我们需要

在 onNewIntent(Intent)方法中处理搜索请求,如下所示: 

 @Override

   protected void onNewIntent(Intent intent) {

       setIntent(intent);

       handleIntent(intent);

   }

    

   private void handleIntent(Intent intent) {

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

//获取输入

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

       

        

         System.out.println(query);

       }

   }

如果没有声明开启模式的话,可以在oncreate()使用

 Intent intent = getIntent();
		//判断是否是搜索请求
		    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
		System.out.println(intent.getStringExtra(SearchManager.QUERY));}

 如果你要在执行搜索时,进行别的操作,可以重写onSearchRequested()方法,如下所示:

  @Override 

   public boolean onSearchRequested() {

       Bundle appDataBundle = new Bundle(); 

       appDataBundle.putString("demo_key", "dddd");

       startSearch("搜索", false, appDataBundle, false); 

       return true; 

   }

猜你喜欢

转载自yinger-fei.iteye.com/blog/1385175
今日推荐