Symbian学习笔记(12):在StatusPane中加上TabGroup

在symbian中的tabgroup的使用比较常见,在多视图的框架中就提供了一些代码。

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 );
}

上面的代码是用来从资源中读取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;
                }
            };
        };
    }

在代码中设置了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 );

这样就OK了。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值