
效果如上图:
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;
}
本文详细介绍了如何在Android应用中实现搜索功能,包括配置文件的修改、searchable.xml的定义、处理搜索请求的方法以及不同场景下的实现逻辑。重点讨论了在不同情况下如何响应搜索请求,以及如何在执行搜索时进行额外的操作。
473

被折叠的 条评论
为什么被折叠?



