Search code examples
androidandroid-toolbar

Toolbar icons disappearing after expanding the SearchView in Android


here's my problem:

I have that nice toolbar with the icons in landscape mode: enter image description here

after expanding the search view and showing the popup menu the "add" item appears (I thought that it shouldn't):

enter image description here

then returning with the back arrow key, as you see, the add button goes:

enter image description here

and you won't find it in the popup menu anymore: enter image description here

I'm using support:appcompat-v7:25.1.0, and here's my menu code:

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/app_bar_search"
        android:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/ic_action_search"
        android:title="Search"
        app:showAsAction="always|collapseActionView"
        android:enabled="true"
        android:visible="true"
        app:actionViewClass="android.support.v7.widget.SearchView"/>
    <item android:title="Add"
        android:enabled="true"
        android:icon="@drawable/ic_action_add"
        android:visible="true"
        app:showAsAction="ifRoom"
        android:id="@+id/add" />
    <item android:title="Settings"
        android:id="@+id/settings"
        app:showAsAction="never"
        android:icon="@drawable/ic_action_settings"
        android:enabled="true"
        android:visible="true" />
    <item android:title="Feedback"
        android:id="@+id/feedbvack"
        app:showAsAction="never"
        android:icon="@drawable/ic_action_feedback"
        android:enabled="true"
        android:visible="true" />

</menu>

I can set the add button showAsAction to "always" but I know that this is discouraged. Does anyone here know why is there this behavior? and how can I prevent that?

Thanks in advance.


Solution

  • You can try to use this:

    MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            return true;
        }
    
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            supportInvalidateOptionsMenu();
            //or use invalidateOptionsMenu();
            return true;
        }
    });
    

    So when SearchView will be collapsed Toolbar will reallocate items and ifRoom items will be visible. I had this bug too and solved it this way.