Search code examples
javaandroidcontextmenuandroid-toolbar

Showing an Icon in the Overflow Menu


I am trying to display action overflow menu with icons in my one application. I am not getting icons in menu. My Target SDK = 23 and Minimum SDK = 16.

enter image description here

My Menu.xml is like below

<?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">
<!-- Single menu item
     Set id, icon and Title for each menu item
-->
<item android:id="@+id/menu_donate"
      android:icon="@drawable/new_facebook_page"
      android:title="@string/facebook"
      app:showAsAction="never" />
<item android:id="@+id/menu_settings"
      android:icon="@drawable/new_facebook_page" 
      android:title="@string/facebook"
      app:showAsAction="never" />
<item android:id="@+id/menu_logout"
      android:icon="@drawable/new_facebook_page"
      android:title="@string/facebook" 
      app:showAsAction="never" />

</menu>

and Java code is like below

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return super.onCreateOptionsMenu(menu);

    }

But it does not showing icons in menu. Let me know if anyone can help me to achieve this without changing menu structure.

Thanks


Solution

  • Add below line to your java class inside onCreateOptionsMenu(Menu menu):

     menu.add(0, 1, 1, menuIconWithText(getResources().getDrawable(R.mipmap.user_2), getResources().getString(R.string.action_profile)));
    

    enter image description here

    Try with below code :

     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
    //        getMenuInflater().inflate(R.menu.menu_patient_home_screen, menu);
    
    
            menu.add(0, 1, 1, menuIconWithText(getResources().getDrawable(R.mipmap.user_2), getResources().getString(R.string.action_profile)));
            menu.add(0, 2, 2, menuIconWithText(getResources().getDrawable(R.mipmap.add_user), getResources().getString(R.string.action_add_user)));
            menu.add(0, 3, 3, menuIconWithText(getResources().getDrawable(R.mipmap.switch_profile), getResources().getString(R.string.action_switch_profile)));
            menu.add(0, 4, 4, menuIconWithText(getResources().getDrawable(R.mipmap.logout), getResources().getString(R.string.action_sign_out)));
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            switch (item.getItemId()) {
                case 1:
                    Toast.makeText(PatientHomeScreen.this, "Profile is Clicked", Toast.LENGTH_SHORT).show();
                    return true;
                case 2:
                    Toast.makeText(PatientHomeScreen.this, "Add New User is Clicked", Toast.LENGTH_SHORT).show();
                    return true;
                case 3:
                    Toast.makeText(PatientHomeScreen.this, "Switch Profile is Clicked", Toast.LENGTH_SHORT).show();
                    return true;
                case 4:
                    Toast.makeText(PatientHomeScreen.this, "Sign Out is Clicked", Toast.LENGTH_SHORT).show();
                    return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        private CharSequence menuIconWithText(Drawable r, String title) {
    
            r.setBounds(0, 0, r.getIntrinsicWidth(), r.getIntrinsicHeight());
            SpannableString sb = new SpannableString("    " + title);
            ImageSpan imageSpan = new ImageSpan(r, ImageSpan.ALIGN_BOTTOM);
            sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    
            return sb;
        }
    

    Or, you can show icon with menu item by :

    xml code :

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/action_alarm"
        android:icon="@drawable/ic_accept"
        android:orderInCategory="100"
        android:title="@string/menu_create_alarm"
        android:showAsAction="always|withText"
        app:showAsAction="always|withText" />
    

    Java Code :

        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        new MenuInflater(this).inflate(R.menu.menu_item, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }