Android_programmer_camera
Android_programmer_camera

Reputation: 13369

Displaying icon for menu items of Action Bar in Honeycomb Android 3.0

I am developing an Android application using Honeycomb android 3.0 . I am trying to display a menu in Action Bar . The menu has an icon and title. When we click the menu item it displays its items in the form of a dropdown list. It was the items in drop down list with item names but without icon it is displaying.

I want an icon to be displayed beside the title in drop down list which appears when I click the menu. can anyone help me in sorting out this issue. My XML file is as below:

<?xml version="1.0" encoding="utf-8"?>           
<menu  xmlns:android="http://schemas.android.com/apk/res/android">  
<item          
  android:id="@+id/addserver"  
  android:icon="@android:drawable/ic_menu_add"   
  android:title="Add Server"    
  android:showAsAction="ifRoom|withText"     
>  
 
<menu>    
            <item android:id="@+id/fileserver"    
                  android:icon="@android:drawable/ic_menu_add"  
                  android:title="File Server"          
                  android:onClick="onCreate"           
                  android:showAsAction="always"/>      
            <item android:id="@+id/sharepoint"            
                  android:icon="@android:drawable/ic_menu_add"  
                  android:title="Share Point"          
                  android:onClick="onCreate" />          
        </menu>            
</item>

  

Initially it displays add server with icon on left. clicking on that will display fileserver, sharepoint as dropdown list without icon though I given android:icon statement.

How can I sort out this issue?

Upvotes: 7

Views: 11443

Answers (3)

nouser2013
nouser2013

Reputation: 666

Though the original question is a bit old and moreover, because reasoning against showing icons in the menu is somewhat lacking substance (see Steven Elliott's excellent remark Displaying icon for menu items of Action Bar in Honeycomb android 3.0), I'd like to point to a great, working solution that was given here:

@Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if(featureId == Window.FEATURE_ACTION_BAR && 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(NoSuchMethodException e) { //...
            } catch(Exception e) { // ...
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

Simply add this code to your activity and import the appropriate modules. Again, not my work, but working none the less.

Upvotes: 1

android developer
android developer

Reputation: 116040

Actually, there is a way to put icons next to the texts for the menu items:

final MenuItem menuItem=...
final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon);
final CharSequence title=" "+menuItem.getTitle();
final SpannableString spannableString=new SpannableString(title);
spannableString.setSpan(imageSpan,0,1,0);
menuItem.setTitle(spannableString);

This will put an icon at the beginning of the menu item, right before its original text.

BTW, this will also work on PopupMenu.

Upvotes: 2

Roman Nurik
Roman Nurik

Reputation: 29745

The behavior where icons are not displayed in the action bar's overflow menu is by design (as of this writing). If you absolutely need to use icons, you'll need to write a custom implementation consider rethinking your design to fit the UI conventions.

Upvotes: 10

Related Questions