Mic*_*Osl 8 android android-widget android-searchmanager
我按照Android API指南中的说明设置了SearchWidget .它在操作栏中正确显示放大镜图标,如果我单击它,它会在操作栏(具有深色背景的输入字段)中启动搜索窗口小部件.
但是,如果我按下虚拟设备的搜索按钮,则会启动另一个搜索字段:它具有白色背景,并且不会调用我指定的回调方法.
所以我把它添加到我的MainActivity类:
public boolean onSearchRequested() {
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setIconified(!searchView.isIconified());
return false;
}
Run Code Online (Sandbox Code Playgroud)
搜索小部件的设置与文档中描述的完全相同:
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());
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
和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>
Run Code Online (Sandbox Code Playgroud)
我尝试使用setIconfied()方法的原因是,在Android API指南中,它说"切换搜索框可见性的能力":
"默认情况下,搜索小部件是"图标化",意味着它仅由搜索图标(放大镜)表示,并在用户触摸时展开以显示搜索框.如上所示,您可以显示搜索默认情况下,通过调用setIconifiedByDefault(false).您还可以通过调用setIconified()来切换搜索小部件外观."
我也试着打电话startSearch("", false, null, false);但这会带来与白色背景相同的搜索字段.
所以我的问题是:如果用户按下设备的搜索按钮,是否可以在操作栏中启动搜索小部件,即执行与单击搜索菜单项完全相同的操作?
Mic*_*Osl 10
在写这个问题时,我自己提出了解决方案.我仍然决定将它与答案一起发布,因为之前似乎没有问过这个问题,也许有人遇到了同样的问题和/或提出了更好的解决方案.
您需要做的就是调用expandActionView()搜索菜单项,一切都按预期工作:
public boolean onSearchRequested() {
menu.findItem(R.id.menu_search).expandActionView();
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3672 次 |
| 最近记录: |