在我的应用程序中,我使用onCreatePanelMenu
来扩展语音识别的菜单。当我膨胀一个简单的菜单时,它工作得很好,但我想做的是根据用户在程序的哪个时刻膨胀一个不同的菜单
使用onCreateOptionsMenu
和invalidateOptionsMenu()
可以很好地用于手势菜单,而对于语音菜单则不一样。
我试图使代码工作是:
@Override
public boolean onCreatePanelMenu(int featureId, Menu menu) { // Voice creation menu...
if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) {
if(conStateMenu){
getMenuInflater().inflate(R.menu.voice_aftcon_menu, menu);
}else{
getMenuInflater().inflate(R.menu.voice_befcon_menu, menu);
}
return true;
}
return super.onCreatePanelMenu(featureId, menu); // Pass through to super to setup touch menu.
}
其中conStateMenu
在执行过程中的某个不同点发生变化。同样,这适用于手势菜单,但不适用于无效菜单,有办法做到这一点吗(无效并加载新菜单)?
谢谢!
您要查找的方法是Window#invalidatePanelMenu(int)
:
getWindow().invalidatePanelMenu(WindowUtils.FEATURE_VOICE_COMMANDS);
这将告诉框架,此功能已失效,需要重新创建/准备。