如何将搜索扩展到完整长度而不显示其他图标?

时间:2017-04-22 22:11:08

标签: android

我在片段中有一个搜索按钮,但操作栏中还有另一个图标。如果我按搜索,则仍会显示另一个图标:/

我在这里发布了一些其他的解决方案,但它们似乎都没有用于片段。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_search, menu);
    SearchView searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView();
    searchView.setMaxWidth(Integer.MAX_VALUE);

根本不起作用

<item
        android:id="@+id/action_search"
        android:icon="@mipmap/ic_search"
        android:title="@string/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always|collapseActionView" />

我认为这是正确的方法,因为它然后显示一个后退箭头,我可以通过按回来取消搜索。但我的其他图标仍在那里,它们只是放在右侧。如果我输入内容并按下另一个按钮,应用程序就会崩溃。

这根本不会被调用:

  MenuItemCompat.getActionView(searchItem).addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {

            @Override
            public void onViewDetachedFromWindow(View arg0) {
                // search was detached/closed
            }

            @Override
            public void onViewAttachedToWindow(View arg0) {
                // search was opened
            }
        });

这里只调用onClose监听器:

searchView.setOnQueryTextListener(this);
        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Hide other option item
                if (menu != null) {
                    menu.findItem(R.id.action_sort).setVisible(false);
                }
            }
        });

        searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                // Show other option item
                if (menu != null) {
                    menu.findItem(R.id.action_sort).setVisible(true);
                    return true;
                }
                return true;
            }
        });

1 个答案:

答案 0 :(得分:1)

您可以使用show/hideoption侦听程序以编程方式searchClick其他close项。

要执行此操作,请按以下步骤更新您的onCreateOptionsMenu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_search, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Hide other option item
            if (menu != null) {
                 menu.findItem(R.id.action_other).setVisible(false);
            }
        }
    });

    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            // Show other option item
            if (menu != null) {
                menu.findItem(R.id.action_other).setVisible(true);
            }
            return false;
        }
    });

    return true;
}

当然,您应该使用app:showAsAction="always|collapseActionView" action_searchmenu_search.xml

<强> menu_search.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/action_search"
        android:icon="@mipmap/ic_search"
        android:title="@string/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always|collapseActionView" />

    <item
        android:id="@+id/action_other"
        android:icon="@drawable/ic_other"
        android:title="Other"
        app:showAsAction="always"/>

</menu>

<强>更新

尝试使用MenuItemCompat.setOnActionExpandListener()

MenuItemCompat.setOnActionExpandListener(menuItem, new OnActionExpandListener() {
    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
        // Do something when collapsed
        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
    }
});

希望这会有所帮助〜