?效果如上图:
?
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)方法中处理搜索请求,如下所示:?
? ?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;?
? ?}