Symbian學(xué)習(xí)筆記(12)
symbian把整個屏幕分成三大塊上面的狀態(tài)面板(StatusPane)、中間的主面板和下面的控制面板(ControlPane)??刂泼姘逯芯褪悄莻€CBA的東西,暫且不管。
狀態(tài)面板中可以讓我們?nèi)ゲ僮鞯陌ǎ簶?biāo)題欄(可以修改顯示標(biāo)題,缺省是應(yīng)用程序名稱)、上下文欄(就是大圖標(biāo)的位置),還有一個就是導(dǎo)航欄了(用來顯示TabGroup或者一些文字信息比如日期、編輯模式之類的)。
在代碼中操作狀態(tài)欄的方法并不復(fù)雜,在AppUi中有一個StatusPane()可以輕松的得到狀態(tài)欄的引用。
= (CAknNavigationControlContainer*)StatusPane()->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
iDecoratedTabGroup = naviPane->ResourceDecorator();
if (iDecoratedTabGroup)...{
iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
iTabGroup->SetObserver( this );
}
上面的代碼是用來從資源中讀取TabGroup的方法,所以需要在rss中增加如下的描述:
{
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;
}
};
};
}
在代碼中設(shè)置了TabGroup的觀察者是this,說明當(dāng)前的AppUi應(yīng)該實現(xiàn)接口
MAknTabObserver的方法void TabChangedL(TInt aIndex)。
不過,我覺得TabGroup應(yīng)該是動態(tài)生成的比較常用,所以可以不用在rss中描述這些東西,在代碼中去創(chuàng)建就好了:
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了。
【編輯推薦】