效果如上图:
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;
}