在前一段时间按照要求在软件的首界面调用系统的浮动搜索框实现搜索的功能,参考了网上的例子很快就实现了,测试也通过了,但是有一天用HTC的A9191测试出现了问题,他的右下角有一个搜索键,而当初测试的时候测试机器是没有这个键的,问题就出在这里,当我单击搜索的按钮的时候可以调出搜索框,当单击手机右下角的搜索键的时候也是可以的,但是当我进入程序里面的时候里面是没有搜索的功能的,我们只在主界面有一个搜索键,但是当单击手机的右下角的搜索键的时候还是能够调出我调用的那个系统的搜索框,而不是系统的那个搜索框,显然输入进屋关键字搜索,当单击搜索键的时候会发生异常,原因很简单,在这个Activity里面没有做处理。但是我现在想要的效果是只在主界面可以有自己调用的系统的搜索框。之后认真读了网上的博客,尝试了很多次终于发现原来是因为:
<meta-data android:name="android.app.default_searchable" android:value=".SearchResult" />
这句话的位置放错了,之前是放在Activity的外面的,整个应用程序中都可以调用搜索框,而不会调用系统自己的了,处理的结果很简单,只要将上面的代码,放到我要调用显示搜索框的那个Activity里面就可以了,其实这也很好解释,放在外面全局的,里面局部的。另外测试了一下如果不写上面的代码默认调用的是系统的那个搜索框,而不是我们调用的那个系统的搜索框。
<activity android:name=".MainActivity" android:label="@string/viewer_app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.default_searchable" android:value=".SearchResult" /> </activity>
而下面的是相应搜索请求并进行处理和现实的Activity:
<activity android:name=".SearchResult" android:configChanges="locale|keyboardHidden|orientation"> <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" /> </activity>
请注意,只有配置了上面的meta-data节点的Activity的节点才能执行搜索。
下面是修正后符合要求的搜索框:
主界面不管是单击搜索键(被键盘盖住了)还是点击系统的搜索按钮出现的都是自己调用的系统的Activity。
这个界面我没有加搜索键更没有添加搜索的相关功能,当单击系统的搜索键的时候,调出的是系统的搜索框。