android - 如何使用 appcompat v7 折叠 Backpressed SearchView?

标签 android searchview android-appcompat

我正在使用 appcompat v7 进行搜索 View ,其中包含除操作栏之外的工具栏。下面是我的菜单 xml 文件和 java 文件。

菜单文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"/>
    <item
        android:id="@+id/action_sort"
        android:icon="@drawable/ic_action_sort"
        android:title="@string/sort"
        app:showAsAction="ifRoom"/>

</menu>

java文件:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.dashboard, menu);

         MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);


        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
        }
            return super.onCreateOptionsMenu(menu);
    }

现在我想折叠 searchview(如果它已展开),否则希望在 backpressed() 方法上进行反向压缩。我怎样才能实现这个目标?

最佳答案

在我自己的设置中,默认情况下会处理回压时的折叠。我没有实现自定义 onBackPressed 方法。除了从 ActionBarActivity 扩展之外,我没有做任何特别的事情。

我使用 MenuItemCompat 来获取 actionview,这可能会成功。

这是我的菜单 xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.yourapp.youractivity">

<item
    android:id="@+id/search"
    android:title="@string/app_name"
    android:icon="@drawable/nav_search"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

这就是我创建菜单的方式

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.shop_list, menu);

    SearchManager searchManager = 
                  (SearchManager)getSystemService(Context.SEARCH_SERVICE);

    //Using MenuItemCompat here, that can do the trick
    searchView = 
            (SearchView)MenuItemCompat.
                        getActionView(menu.findItem(R.id.search));

    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    //etc...
    //etc...

    return true;
}

关于android - 如何使用 appcompat v7 折叠 Backpressed SearchView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30618698/

相关文章:

android - 在操作栏中实现 SearchView

android - 设置 SupportActionBar 字幕多行

Android:SearchView组件更改图标(无ActionBar)

java - 无法在android中将uri转换为位图

java - 使用 SearchView 过滤 Recyclerview 后位置错误

java - 如何在 Android/Java 中用 JSON 数组解析 JSONArray?

android - setSuggestionAdapter() 不适用于 android.support.v7.widget.SearchView

Android菜单覆盖背景颜色

android - 当我在 build.gradle 中打开 flutter 项目红线中的 android 文件夹时出现错误任何想法

java - 谷歌 adt/gwt 支持 eclipse 4.4 (Luna)