How to display menu item with icon and text in AppCompatActivity

前端 未结 9 1777
遥遥无期
遥遥无期 2020-11-29 05:11

I tried different combinations in xml file:



        
相关标签:
9条回答
  • 2020-11-29 05:29

    You need to add tools:context="your class" to menu tag

    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"
       xmlns:tools="http://schemas.android.com/tools"
       tools:context=".activities.BaseActivity">
    
    
       <item
           android:id="@+id/action_notification1"
           android:icon="@drawable/three"
           android:title="action_notification"
           app:showAsAction="always">
           <menu>
               <item
                   android:id="@+id/profile"
                   android:icon="@drawable/profile"
                   android:orderInCategory="100"
                   android:title="PROFILE" />
    
               <item
                   android:id="@+id/c"
                   android:icon="@drawable/correct_tick"
                   android:orderInCategory="100"
                   android:title="COMPLETED TRIPS" />
    
               <item
                   android:id="@+id/app"
                   android:icon="@drawable/report_issue"
                   android:orderInCategory="100"
                   android:title="REPORT ISSUES" />
               <item
                   android:id="@+id/r"
                   android:icon="@drawable/correct_tick"
                   android:orderInCategory="100"
                   android:title="REACHED CENTER" />
    
    
               <item
                   android:id="@+id/pdf"
                   android:icon="@drawable/pdf_image"
                   android:orderInCategory="100"
                   android:title="BAG INFO" />
               <item
                   android:id="@+id/l"
                   android:icon="@drawable/logout"
                   android:orderInCategory="100"
                   android:title="LOGOUT" />
           </menu>
       </item>
    
    
    </menu>
    

    Override onCreateOptionsMenu() Method

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu); 
        menu.getItem(0).getSubMenu().getItem(3).setVisible(false);
        menu.getItem(0).getSubMenu().getItem(4).setVisible(true);
        return super.onCreateOptionsMenu(menu);
    } 
    

    You should write tool:context to menu tag then run you will get icons before your text.

    0 讨论(0)
  • 2020-11-29 05:34

    'always|withText' will work if there is sufficient room, otherwise it will place only the icon.You an see that by rotating phone to landscape mode..

           <item
            android:id="@+id/action_create_alarm"
            android:icon="@drawable/ic_launcher"
            android:title="Save"
            app:showAsAction="always|withText"
            />
    
    0 讨论(0)
  • 2020-11-29 05:37
    protected boolean onPrepareOptionsPanel(View view, Menu menu) {
        if (menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try {
                    Method m = menu.getClass().getDeclaredMethod(
                            "setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (Exception e) {
                    Log.e(getClass().getSimpleName(),
                            "onMenuOpened...unable to set icons for overflow menu",
                            e);
                }
            }
        }
        return super.onPrepareOptionsPanel(view, menu);
    }
    
    0 讨论(0)
  • 2020-11-29 05:38
    @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;
        }
    

    Hope this will help you

    0 讨论(0)
  • 2020-11-29 05:39

    xml:

    <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_create_alarm"
            android:icon="@drawable/ic_action_accept"
            android:orderInCategory="100"
            android:title="@string/menu_create_alarm"
            android:showAsAction="always|withText"
            app:showAsAction="always|withText" />
    </menu>
    

    java:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        new MenuInflater(this).inflate(R.menu.menu_frg_safetybox, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
    
    0 讨论(0)
  • 2020-11-29 05:39

    try these two together

    app:showAsAction="always|withText"
    android:showAsAction="always|withText"
    
    0 讨论(0)
提交回复
热议问题