【问题标题】:Show SearchWidget in ActionBar if user presses the device's search button如果用户按下设备的搜索按钮,则在 ActionBar 中显示 SearchWidget
【发布时间】:2012-12-09 19:04:51
【问题描述】:

我按照Android API Guide 中的描述设置了一个 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);,但这会显示相同的搜索字段,但背景为白色。

所以我的问题是:如果用户按下设备的搜索按钮,是否可以在操作栏中启动搜索小部件,即执行与单击搜索菜单项完全相同的操作?

【问题讨论】:

    标签: android android-widget android-searchmanager


    【解决方案1】:

    在写这个问题时,我自己想出了解决方案。我仍然决定将它与答案一起发布,因为之前似乎没有在 SO 上提出过这个问题,也许有人遇到了同样的问题和/或提出了更好的解决方案。

    您需要做的就是在搜索菜单项上调用expandActionView(),一切都会按预期进行:

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

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多