如何隐藏Searchview中的后退按钮

时间:2015-03-27 05:58:05

标签: android searchview

有没有人知道如何隐藏AppCompat v21 searchview中的后退按钮? (绿线概述)

searchview back button

我经常搜索但找不到任何有用的东西。

menu_main.xml:

<item android:id="@+id/search"
        android:title="@string/search_title"
        app:showAsAction="always|collapseActionView"
        android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
        android:orderInCategory="300"
        app:actionViewClass="android.support.v7.widget.SearchView" />

<item android:id="@+id/action_home"
    android:title="Home"
    android:icon="@drawable/v_home"
    app:showAsAction="always"
    android:orderInCategory="180"/>

<item android:id="@+id/action_favorites"
    android:title="Favorites"
    android:icon="@drawable/v_favorites"
    app:showAsAction="always" />

MainActivity:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);

        firstMenu = menu;


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

        MenuItem searchItem = menu.findItem(R.id.search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setSubmitButtonEnabled(true);
        searchView.setActivated(true);


        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                menuItemsVisibility(false);
            }
        });
        searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                menuItemsVisibility(true);
                return false;
            }
        });

        return true;
    }

    @Override
    public void onBackPressed() {
        menuItemsVisibility(true);
        super.onBackPressed();
    }

// setting visibility of menu items on search
private void menuItemsVisibility(boolean visibility) {

    MenuItem homeItem = firstMenu.findItem(R.id.action_home);
    MenuItem favoriteItem = firstMenu.findItem(R.id.action_favorites);
    MenuItem otItem = firstMenu.findItem(R.id.action_ot);
    MenuItem ntItem = firstMenu.findItem(R.id.action_nt);
    homeItem.setVisible(visibility);
    favoriteItem.setVisible(visibility);
    otItem.setVisible(visibility);
    ntItem.setVisible(visibility);
}

注意:行为showAsAction:始终并使用方法menuItemsVisibility()来调整工具栏项的可见性是有意的。

另一个注意事项:MainActivity扩展了ActionBarActivity,它还实现了ObservableScrollView库中的ObservableScrollViewCallbacks实现。

3 个答案:

答案 0 :(得分:5)

将app:showAsAction =“always | collapseActionView”更改为app:showAsAction =“always”

答案 1 :(得分:2)

使用方法:

getSupportActionBar().setDisplayHomeAsUpEnabled(false);

从操作栏中删除主页按钮。

答案 2 :(得分:1)

这不是完全安全的方法,因为后退按钮(导航向上)没有id。但是,如果您将AppCompat与工具栏一起使用,则可以使用此代码来查找它。它应该是布局中的第一个。

  int count = this.getToolbar().getChildCount();

    for(int i = 0; i < count; ++i) {
        View v = this.getToolbar().getChildAt(i);
        if(v instanceof ImageButton) {
            return (ImageButton)v;
        }
    }

如果要更改该按钮的drawable,请在onPrepareOptionsMenu中调用此方法。