Search code examples
javaandroidxmlmenuandroid-toolbar

How to Control Menu Position in Toolbar Android


I want to change the gravity of my inflated menu item in android xml code but i could not find any attribute to solve the problem. i want an item in the left side and another item in right side of corner in Toolbar.

Do you have any idea guys?

Here's my present state:

screenshot of toolbar

Here's my 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/dismis"
        android:icon="@drawable/close"
        android:title="Done"
        app:showAsAction="always"></item>

    <item
        android:id="@+id/saveNote"
        android:icon="@drawable/save"
        android:title="Done"
        app:showAsAction="always"></item>


</menu>

Solution

  • Use Toolbar navigation item(LEFT) for dismiss item and option menu(RIGHT) for saveNote item.

    Dismiss:

    You can use Toolbar navigation item as dismiss action. Set close icon as Toolbar navigation icon by using Toolbar.setNavigationIcon(). To handle the click event, add NavigationOnClickListener to Toolbar.

    SaveNote:

    Inflate menu XML to Toolbar using Toolbar.inflateMenu(). To handle saveNote item click event, add OnMenuItemClickListener to Toolbar.

    Follow below steps:

    1. Remove dismiss item from menu XML.

    // menu_main.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/saveNote"
            android:icon="@drawable/save"
            android:title="Done"
            app:showAsAction="always">
        </item>
    </menu>
    

    2. In your activity, do below changes for dismiss and saveNote actions.

    public class MainActivity extends AppCompatActivity {
    
    
        // ToolBar
        Toolbar mToolBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            ...........
            .....................
    
            // ToolBar
            mToolBar = (Toolbar) findViewById(R.id.toolbar);
    
            // Required to use Toolbar as ActionBar
            setSupportActionBar(mToolBar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setTitle("StackOverflow");
    
            // Dismiss Action
            mToolBar.setNavigationIcon(R.drawable.close);
            mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    // Do something
                    Toast.makeText(getApplicationContext(), "Dismiss", Toast.LENGTH_SHORT).show();
                }
            });
    
            // SaveNote Action
            mToolBar.inflateMenu(R.menu.menu_main);
            mToolBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
    
                    if (item.getItemId() == R.id.saveNote)
                    {
                        // Do something
                        Toast.makeText(getApplicationContext(), "Save", Toast.LENGTH_SHORT).show();
                    }
                    return true;
                }
            });
    
    
            .............
            ....................... 
        }
    }
    

    OUTPUT:

    enter image description here

    Hope this will help~