1.点击ok键,弹出菜单
if( aKeyEvent.iScanCode == EStdKeyDevice3 && aType == EEventKey)
{
G_UserSettingView()->MenuBar()->TryDisplayMenuBarL();
}
注:aType 项是一定得有的,不然会弹出菜单后直接响应菜单项的
2.动态修改菜单(这是一种变通的方法,实际上是把整个menubar替换掉了)
iView->MenuBar()->SetMenuTitleResourceId(R_XXX_MENU_BAR);
注:R_XXX_MENU_BAR 是 MENU_BAR。刚开始网上找资料的时候,被人误导了,写成了MENU_PANE,呢个郁闷 啊
3.动态菜单
在AppUi中或在View中 继承 DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane),实现即可。
下面是一个例子(发现蓝牙设备后,显示出连接的菜单):
void CBluetoothAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
{
if (aResourceId == R_MENU)
{
TBool myActiveDiscovery( iEngine->IsDiscoveryActive() );
aMenuPane->SetItemDimmed(ECmdConnectDevices, ETrue); //隐藏
if(iEngine->GetDeviceDiscoverer()->HasDevices() && myActiveDiscovery )
{
aMenuPane->SetItemDimmed(ECmdConnectDevices, EFalse);
aMenuPane->SetItemDimmed(ECmdDiscoverDevices, ETrue);
}
}
}
在运行时,点击菜单时会调用 该函数
注:Ui 及View的基类已继承了MEikMenuObserver,因此直接加 DynInitMenuPaneL() 到ui或view就 ok 了。