【发布时间】:2014-06-18 08:11:54
【问题描述】:
我希望你能帮我解决这个问题。
我有一个带有默认图标集的操作栏项目。(android:icon="@drawable/ic_action_volume_on") 但问题是我需要在我的方法“onOptionsItemSelected”中以某种方式以编程方式更改它,而且由于我最近开始使用 Android,我有点迷失了......
【问题讨论】:
标签: android replace icons action
我希望你能帮我解决这个问题。
我有一个带有默认图标集的操作栏项目。(android:icon="@drawable/ic_action_volume_on") 但问题是我需要在我的方法“onOptionsItemSelected”中以某种方式以编程方式更改它,而且由于我最近开始使用 Android,我有点迷失了......
【问题讨论】:
标签: android replace icons action
首先你必须在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)。
【讨论】:
你可以简单地通过定义来做到这一点
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);
【讨论】: