如何让SearchView在Android中始终展开?

49

我在布局的顶部(而不是在操作栏中)有一个 SearchView,有没有办法强制该视图始终展开(打开)?

如果不行,我希望在它附近放置一个漂亮的图片,有没有办法当 SearchView 扩展(被点击/展开)时隐藏这个图片?

4个回答

108

24
如果使用 support.widget,app:iconifiedByDefault="false" 表示默认情况下不要将小部件收起。 - Bawa

18
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchItem.expandActionView();

在菜单文件中,使用

 showAsAction="ifRoom|collapseActionView"
如果有任何问题,请随意发表评论。

1
如果你想知道,这句代码的翻译是:MenuItem searchItem = menu.findItem(R.id.menu_search) - Touré Holder
问题明确指出,searchView不在actionBar中。 - MMK

6
我正在将这个内容转换为片段形式, 我是通过使用以下方法完成的

searchItem.expandActionView();

但是当用户按下返回按钮时,它会折叠起来,所以在折叠方法中我使用了:
getActivity().getSupportFragmentManager().popBackStack();
// when it collapsed i am going back

以下是我的详细解决方案:
search_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/search_contacts"
        android:title="search"
        android:icon="@drawable/search2"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView" >
    </item>
</menu>

在片段中,我使用了以下代码:
@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.search_menu, menu);

        // Define the listener
        MenuItemCompat.OnActionExpandListener expandListener = new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item)
            {
                getActivity().getSupportFragmentManager().popBackStack();
                // Do something when action item collapses
                return true;  // Return true to collapse action view
            }

            @Override
            public boolean onMenuItemActionExpand(MenuItem item)
            {

                // Do something when expanded
                return true;  // Return true to expand action view
            }
        };



        MenuItem searchItem = menu.findItem(R.id.search_contacts);


        // Assign the listener to that action item
        MenuItemCompat.setOnActionExpandListener(searchItem, expandListener);

        // Any other things you have to do when creating the options menu…



        SearchView searchView =
                (SearchView) MenuItemCompat.getActionView(searchItem);
        //searchView.setIconifiedByDefault(false);
        searchItem.expandActionView(); // when fragment opens it expanded auto


        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText)
            {
                seachViewFunction(newText); // in searchViewFunction(newText); i am doing my things
                return false;
            }
        });

        super.onCreateOptionsMenu(menu, inflater);
    }

5
您可以尝试使用:

searchView.onActionViewExpanded();

如果您不需要打开键盘

searchView.clearFocus();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接