状态面板占据了屏幕的顶部区域,用于显示与当前应用程序和设备自身的状态有关的信息。
1. 更改状态面板的可见性
图1-1 状态面板——可见性打开 图1-2状态面板——可见性关闭
要实现上面的功能,需要在StatusPane实例中的CStatusPaneAppUi::HandleCommandL()方法中添加如下代码:
void CStatusPaneAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EEikCmdExit:
case EAknSoftkeyExit:
Exit();
break;
case EStatusPaneCmdChangeVisibility:
{
//获取面板指针
CEikStatusPane* statusPane = this->StatusPane();
//CurrentLayoutResId返回当前布局的资源ID
if(statusPane->CurrentLayoutResId() != R_AVKON_STATUS_PANE_LAYOUT_EMPTY)
{
/**
* SwitchLayoutL()把状态面板的布局改为指定的资源ID
* R_AVKON_STATUS_PANE_LAYOUT_EMPTY把状态面板指定为“隐藏”
* R_AVKON_STATUS_PANE_LAYOUT_USUAL指定状态面板显示“标准布局”
* R_AVKON_STATUS_PANE_LAYOUT_IDLE 指定状态面板显示“带时钟的标准布局”
* R_AVKON_STATUS_PANE_LAYOUT_POWER_OFF_RECHARGE
*/
statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_EMPTY);
}
else
{
statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
//statusPane->SetDimmed(ETrue);
//statusPane->SetFaded(ETrue);
//statusPane->MakeVisible(ETrue);
}
break;
}
default:
Panic(EStatusPaneUi);
break;
}
}
2.处理状态面板尺寸的更改
在把状态面板设置为不可见时仍然能够看到上一屏的状态面板,因为没有调整容器的尺寸,即没有调用SizeChanged()方法。为了调用该方法需要重写容器的HandleStatusPaneSizeChange()方法,如在StatusPane实例中,重写视图类中的CAknView::HandleStatusPaneSizeChange()方法:
void CStatusPaneView1::HandleStatusPaneSizeChange()
{
iAppView->SetRect(ClientRect());
}
当状态面板的尺寸更改时,框架会调用此方法,把状态面板设置为不可见后,容器可选的区域会增加。
StatuPane实例是动态的更改状态面板,也可以通过定义STATUS_PANE_APP_MODEL、并且在EIK_APP_INFO中引用它而在资源文件中静态设置状态面板。