我希望你能帮我一把。
我有一个带有默认图标集的Action栏项。(android:icon =" @ drawable / ic_action_volume_on") 但问题是我需要以某种方式在我的方法中以某种方式改变它" onOptionsItemSelected"自从我最近开始使用Android以来,我有点迷失......
答案 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);