以编程方式更改选项菜单按钮图像 - ResourcesNotFoundException

时间:2014-08-25 00:11:39

标签: java android menuitem

我的选项菜单中有一个麦克风按钮。当我点击它时,我希望它显示一个替代图像(红色麦克风)。

但它没有用。使用ResourcesNotFoundException失败。图像(png' s)肯定在相应的res文件夹中。

这是我的代码: 在活动中:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    case R.id.ic_action_microphone :
      MenuItem rec = m_menu.findItem(R.id.ic_action_microphone);
      if (m_start) {                
        rec.setIcon(R.id.ic_action_microphone_active);
        startRecording();
      } else {
        rec.setIcon(R.id.ic_action_microphone);
        stopRecording();
      }
      return true;
      default:
        return super.onOptionsItemSelected(item);
  }
}

在xml文件中:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/ic_action_microphone"
      android:icon="@drawable/ic_action_microphone"
      android:title="@string/action_microphone"
      android:showAsAction="always"/>
 <item android:id="@+id/ic_action_microphone_active"
      android:icon="@drawable/ic_action_microphone_active"
      android:title="@string/action_microphone"/>  
 </menu>

我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:3)

请尝试此操作:通过提供可绘制资源文件夹中的图像来设置图标。

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
   switch (item.getItemId()) {
      case R.id.ic_action_microphone :
         MenuItem rec = m_menu.findItem(R.id.ic_action_microphone);
         if (m_start) {                
            rec.setIcon(R.drawable.ic_action_microphone_active);
            startRecording();
         } else {
            rec.setIcon(R.drawable.ic_action_microphone);
            stopRecording();
         }
         return true;
      default:
         return super.onOptionsItemSelected(item);
   }
}

您可能希望从drawable而不是id设置资源。我希望这会对你有所帮助。