显示在动作条SearchWidget如果用户按设备的搜索按钮(Show SearchWidget i

2019-07-17 12:36发布

我成立了一个SearchWidget的描述Android的API指南 。 它正确地显示在操作栏放大镜图标,如果我点击它,它会启动操作栏(带有深色背景的输入字段)中搜索小工具。

但是,如果我按虚拟设备的搜索按钮,然后不同的搜索领域推出:它有一个白色的背景和不调用我指定的回调方法。

所以我说这我的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(假)复选框。您也可以通过调用setIconified()切换搜索小工具的外观“。

我也试图拨打startSearch("", false, null, false); 但是这带来了白色背景相同的搜索领域。

所以我的问题是:是否有可能推出,如果用户按设备的搜索按钮在操作栏中搜索小工具,即究竟[执行同样的动作,仿佛在搜索菜单项被点击?

Answer 1:

在写这个问题我想出了通过自己的解决方案。 我还是决定与答案后沿,因为它似乎并不像这个问题已经被问过此之前,也许有人遇到同样的问题和/或更好的解决方案出现。

所有你需要做的就是调用expandActionView()上的搜索菜单项,然后一切工作像预期:

public boolean onSearchRequested() {
    menu.findItem(R.id.menu_search).expandActionView();
    return true;
} 


文章来源: Show SearchWidget in ActionBar if user presses the device's search button