我按照Android API Guide中的说明设置SearchWidget。它在操作栏中正确显示放大镜图标,如果我点击它,它将在操作栏(具有深色背景的输入字段)中启动搜索小部件。如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget
但是,如果我按虚拟设备的搜索按钮,然后不同的搜索领域推出:它有一个白色的背景和不调用我指定的回调方法。
所以我将此添加到我的MainActivity类别:
public boolean onSearchRequested() {
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setIconified(!searchView.isIconified());
return false;
}
搜索小工具的建立是完全一样的,因为它是在文档中描述:
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new CustomSearchQueryTextListener());
我searchable.xml :
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name">
</searchable>
而且AndroidManifest.xml中:
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:uiOptions="splitActionBarWhenNarrow" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
为什么我试过setIconfied的原因()方法是,Android的API在引导它在“切换搜索框能见度的能力”说:
“默认情况下,搜索小工具是“图标化的”,这意味着它仅由代表搜索图标(放大镜)代表的 ,并且当用户触摸它时扩展到 显示搜索框。如上图所示,默认情况下,您可以通过调用 setIconifiedByDefault(false), 显示搜索框。您也可以通过调用切换搜索小工具 外观setIconified()“
我也试着拨打startSearch("", false, null, false);
但是这带来了同样的搜索领域与白色背景
所以我的问题是。:如果用户按下设备的搜索按钮,是否可以在操作栏中启动搜索小部件,即执行与搜索菜单项被点击完全相同的操作?