在symbian中的tabgroup的使用比较常见,在多视图的框架中就提供了一些代码。
symbian把整个屏幕分成三大块上面的状态面板(StatusPane)、中间的主面板和下面的控制面板(ControlPane)。控制面板中就是那个CBA的东西,暂且不管。
状态面板中可以让我们去操作的包括:标题栏(可以修改显示标题,缺省是应用程序名称)、上下文栏(就是大图标的位置),还有一个就是导航栏了(用来显示TabGroup或者一些文字信息比如日期、编辑模式之类的)。
在代码中操作状态栏的方法并不复杂,在AppUi中有一个StatusPane()可以轻松的得到状态栏的引用。
上面的代码是用来从资源中读取TabGroup的方法,所以需要在rss中增加如下的描述:
在代码中设置了TabGroup的观察者是this,说明当前的AppUi应该实现接口MAknTabObserver的方法void TabChangedL(TInt aIndex)。
不过,我觉得TabGroup应该是动态生成的比较常用,所以可以不用在rss中描述这些东西,在代码中去创建就好了:
这样就OK了。
symbian把整个屏幕分成三大块上面的状态面板(StatusPane)、中间的主面板和下面的控制面板(ControlPane)。控制面板中就是那个CBA的东西,暂且不管。
状态面板中可以让我们去操作的包括:标题栏(可以修改显示标题,缺省是应用程序名称)、上下文栏(就是大图标的位置),还有一个就是导航栏了(用来显示TabGroup或者一些文字信息比如日期、编辑模式之类的)。
在代码中操作状态栏的方法并不复杂,在AppUi中有一个StatusPane()可以轻松的得到状态栏的引用。
iNaviPane
= (CAknNavigationControlContainer * )StatusPane() -> ControlL(TUid::Uid(EEikStatusPaneUidNavi));
iDecoratedTabGroup = naviPane -> ResourceDecorator();
if (iDecoratedTabGroup) {
iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
iTabGroup->SetObserver( this );
}
= (CAknNavigationControlContainer * )StatusPane() -> ControlL(TUid::Uid(EEikStatusPaneUidNavi));
iDecoratedTabGroup = naviPane -> ResourceDecorator();
if (iDecoratedTabGroup) {
iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
iTabGroup->SetObserver( this );
}
上面的代码是用来从资源中读取TabGroup的方法,所以需要在rss中增加如下的描述:
RESOURCE EIK_APP_INFO
{
status_pane = r_app_status_pane;
}
RESOURCE STATUS_PANE_APP_MODEL r_app_status_pane
{
panes =
{
SPANE_PANE
{
id = EEikStatusPaneUidNavi;
type = EAknCtNaviPane;
resource = r_navi_decorator;
}
};
}
RESOURCE NAVI_DECORATOR r_navi_decorator
{
type = ENaviDecoratorControlTabGroup;
control = TAB_GROUP
{
tab_width = EAknTabWidthWithTwoTabs;
active = 0 ;
tabs = {
TAB
{
id = EUniNewsTabSZ;
txt = qtn_tab_title_sz;
} ,
TAB
{
id = EUniNewsTabGJ;
txt = qtn_tab_title_gj;
}
};
};
}
{
status_pane = r_app_status_pane;
}
RESOURCE STATUS_PANE_APP_MODEL r_app_status_pane
{
panes =
{
SPANE_PANE
{
id = EEikStatusPaneUidNavi;
type = EAknCtNaviPane;
resource = r_navi_decorator;
}
};
}
RESOURCE NAVI_DECORATOR r_navi_decorator
{
type = ENaviDecoratorControlTabGroup;
control = TAB_GROUP
{
tab_width = EAknTabWidthWithTwoTabs;
active = 0 ;
tabs = {
TAB
{
id = EUniNewsTabSZ;
txt = qtn_tab_title_sz;
} ,
TAB
{
id = EUniNewsTabGJ;
txt = qtn_tab_title_gj;
}
};
};
}
在代码中设置了TabGroup的观察者是this,说明当前的AppUi应该实现接口MAknTabObserver的方法void TabChangedL(TInt aIndex)。
不过,我觉得TabGroup应该是动态生成的比较常用,所以可以不用在rss中描述这些东西,在代码中去创建就好了:
iTabGroup
=
CAknTabGroup::NewL(
*
iNaviPane);
iTabGroup -> SetTabFixedWidthL(EAknTabWidthWithTwoTabs);
iTabGroup -> SetObserver( this );
RArray < TNewsChannel > * rc = iChannelHandler -> GetChannels();
for (TInt i = 0 ;i < rc -> Count();i ++ ) {
iTabGroup->AddTabL((*rc)[i].id,*((*rc)[i].title));
}
iDecoratedTabGroup = CAknNavigationDecorator::NewL( iNaviPane, iTabGroup, CAknNavigationDecorator::ETabGroup );
iNaviPane -> PushL( * iDecoratedTabGroup );
iTabGroup -> SetActiveTabByIndex( 0 );
iTabGroup -> SetTabFixedWidthL(EAknTabWidthWithTwoTabs);
iTabGroup -> SetObserver( this );
RArray < TNewsChannel > * rc = iChannelHandler -> GetChannels();
for (TInt i = 0 ;i < rc -> Count();i ++ ) {
iTabGroup->AddTabL((*rc)[i].id,*((*rc)[i].title));
}
iDecoratedTabGroup = CAknNavigationDecorator::NewL( iNaviPane, iTabGroup, CAknNavigationDecorator::ETabGroup );
iNaviPane -> PushL( * iDecoratedTabGroup );
iTabGroup -> SetActiveTabByIndex( 0 );
这样就OK了。