任何人都可以指向任何教程的方向,这些教程展示了如何使用如下图所示的简单检查创建选项菜单:
alt text http://img291.imageshack.us/img291/1221/deviceit.png
我尝试过如下:
/** Menu creation and setup **/
/* Creates the menu items */
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, 1, 0, "Speaker").setCheckable(true);
menu.add(0, 2, 0, "Mute").setCheckable(true);
return result;
}
/* Handles item selections */
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
if(audioManager.isSpeakerphoneOn()==false){
audioManager.setSpeakerphoneOn(true);
audioManager.setRouting(AudioManager.MODE_IN_CALL,
AudioManager.ROUTE_SPEAKER, AudioManager.ROUTE_ALL);
}else{
audioManager.setSpeakerphoneOn(false);
audioManager.setRouting(AudioManager.MODE_IN_CALL,
AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
}
return true;
case 2:
if(audioManager.isMicrophoneMute())
audioManager.setMicrophoneMute(false);
else
audioManager.setMicrophoneMute(true);
return true;
}
return false;
}
但是这不起作用它只给我选项菜单上的按钮上的文字
编辑:我添加了以下onPrepareOptionsMenu方法:
public boolean onPrepareOptionsMenu(Menu menu){
boolean result = super.onPrepareOptionsMenu(menu);
if(audioManager.isSpeakerphoneOn())
menu.findItem(1).setChecked(true);
else
menu.findItem(1).setChecked(false);
if(audioManager.isMicrophoneMute())
menu.findItem(2).setChecked(true);
else
menu.findItem(2).setChecked(false);
return result;
}
然而,我得到了相同的结果,只有文字,没有检查灯,如上图所示
答案 0 :(得分:4)
如果您想动态更改选项菜单的状态,则需要使用onPrepareMenu()
。在此方法中,您可以执行动态检查并更新所需的任何内容。
祝你好运!!
documentation
经过一番挖掘,这看起来像一个自定义视图。我想你的照片是from this code。
答案 1 :(得分:1)
这是一个古老的问题,但我遇到了同样的问题并且经常搜索以找到上面显示的这样的选项菜单。我在http://www.codeproject.com找到了一个教程并对其进行了一些修改。也许它不是profi-programmers-code,但它对我有用。看看我在谷歌网站上的(排列不好的)网页上的修改(我在这个网站上也得到了一些教程):
https://sites.google.com/site/opiatefuchs/android-code-examples
此代码来自代码项目网页上的wjfrancis原创(许多道具):
http://www.codeproject.com/Articles/173121/Android-Menus-My-Way
我刚修改过它,如果有人想要改进这段代码,我会很高兴。但就目前而言,它确实有效。