如何替换/更改操作栏项的图标

时间:2014-06-18 08:11:55

标签: android replace icons action

我希望你能帮我一把。

我有一个带有默认图标集的Action栏项。(android:icon =" @ drawable / ic_action_volume_on") 但问题是我需要以某种方式在我的方法中以某种方式改变它" onOptionsItemSelected"自从我最近开始使用Android以来,我有点迷失......

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:1)

您只需定义

即可
private Menu menu;

并在onCreateOptionMenu回调中为菜单分配值并获取此类菜单inflater

@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);