我想澄清一下,我谈的是导航抽屉菜单,而不是动作按钮图标。
我需要以编程方式更改菜单图标。为此我接下来做了:
private Menu menu;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
this.menu = menu;
getMenuInflater().inflate(R.menu.navigation_menu, menu);
return super.onCreateOptionsMenu(menu);
}
....我尝试用:
更改图标项目 menu.getItem(6).setIcon(getResources().getDrawable(R.mipmap.ic_flash_on_black_24dp));
不幸的是,该项目保持不变。可以帮我解决问题吗?
我观察到不推荐使用getDrawable,但不知道如何使用新的。
答案 0 :(得分:0)
尝试在onPrepareOptionsMenu
方法中放置图标修改代码:
准备要显示的屏幕标准选项菜单。每次显示菜单时都会调用此菜单。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。
答案 1 :(得分:0)
答案非常简单:
private Menu menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);
navigationView.setNavigationItemSelectedListener(this);
menu = navigationView.getMenu();
...
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_light) {
if (canTorch) {
try {
if (isTorchOn) {
turnOffFlashLight();
isTorchOn = false;
menu.getItem(6).setIcon(getResources().getDrawable(R.mipmap.ic_flash_on_black_24dp));
} else {
turnOnFlashLight();
isTorchOn = true;
menu.getItem(6).setIcon(getResources().getDrawable(R.mipmap.ic_flash_off_black_24dp));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawerLayout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
全部是关于:menu = navigationView.getMenu();