2014-06-18 62 views
0

我希望你能给我一个这方面的帮助。 (android:icon =“@ drawable/ic_action_volume_on”) 但事情是,我需要改变它以编程方式在我的方法“onOptionsItemSelected”,因为我最近与Android开始我是有点失落......如何更换/更改操作栏项目的图标

回答

1

首先,你必须保存在onCreateOptionsMenu菜单实例:

private Menu menu; 

@Override 
public boolean onCreateOptionsMenu(final Menu menu) { 
    this.menu = menu 
    ... 
} 

然后,您可以创建以下方法:

private void setItemView(int itemId, int layoutId) { 
    if (menu != null) { 
     final Menuitem myItem = menu.findItem(itemId); 
     if (myItem != null) { 
      MenuItemCompat.setActionView(myItem, layoutId); 
     } 
    } 
} 

它用视图替换项目的当前图标。例如,如果你想显示ProgressBar你可以创建这个布局(让我们将其命名为item_custom_view.xml):

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="56dp" 
    android:layout_height="wrap_content" 
    android:minWidth="56dp" > 

    <ProgressBar 
     android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:layout_gravity="center" /> 
</FrameLayout> 

最后,在Activity,只需调用setItemView方法。在参数中输入您的物品的ID和布局的ID(在这种情况下为R.layout.item_custom_view)。

+0

是的,这给我一个解决方法,非常感谢,最后我修复了它w ith: final MenuItem myItem = menu.findItem(R.id.stop_music); myItem.setIcon(R.drawable.ic_action_volume_muted); –

1

你可以简单地定义

private Menu menu; 

和onCreateOptionMenu回调值分配给菜单做到这一点,让菜单吹气这样

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    this.menu=menu; 
    getMenuInflater().inflate(R.menu.menu_bar, menu); 
    return true; 
} 

最后,你可以这样写行更改图标你的首选方法

menu.findItem(R.id.item_id).setIcon(R.drawable.your_icon);