很多开发者都会为界面、控件而发愁。
其中,对系统控件的运用是开发者纠结最多的问题。
每个平台都有自己的系统控件,系统控件是由系统开发商开发的,各个方面都很成熟,节省开发时间。
但也有很严重的问题,如:界面陈旧,很难进行定制与修改。
如果自己写控件会很耗时、耗力,而且效果一般(有限的设计、美工与开发时间)。
熟练应用各种系统控件对快速开发很有帮助。
// 实例化各工具类
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
CAknsItemDef* def;
// 实际的操作很简单,就两步。
// 修改CBA 背景——KAknsIIDQsnBgAreaControl 是CBA 的索引,换哪一部分的背景就用哪一部分索引。
//fileName 图片文件路径,aCbaIndex 为待替换的CBA 图片索引。
def = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnBgAreaControl, fileName, aCbaIndex);
skin->SetLocalItemDefL(def);
// 菜单弹出后的CBA
def = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnBgAreaControlPopup, fileName, aCbaIndex);
skin->SetLocalItemDefL(def);
// 修改弹出菜单背景
def = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnFrPopup, fileName, aMenuIndex);
skin->SetLocalItemDefL(def);
// 修改状态面板背景
def = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnBgAreaStatus, iPicfileName, aStatuPaneIndex);
skin->SetLocalItemDefL(def);
// 修改列表背景
def = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnBgAreaMainListGene, iPicfileName, aImgIndex);
skin->SetLocalItemDefL(def);
剩下的自己去查索引吧。。。
注意:
(1) 尽量分开设定,不要连续设定多个,有时会失效。
(2) 设定菜单弹出后的CBA 和菜单背景比较特殊,设定前必须先将菜单弹出至少一次(我也很困惑)。
弹出菜单的方式有很多——如:对话框、进度条、提示等。
例如:
// 先弹出对话框:
CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog();
dlg->PrepareLC(R_ABOUT_QUERY_DIALOG);
HBufC* title = iEikonEnv->AllocReadResourceLC(R_HTMLLIST_HELP);
dlg->QueryHeading()->SetTextL(*title);
CleanupStack::PopAndDestroy(); //title
HBufC* msg = iEikonEnv->AllocReadResourceLC(R_HTMLLIST_HELPTEXT);
dlg->SetMessageTextL(*msg);
CleanupStack::PopAndDestroy(); //msg
dlg->RunLD();
// 再进行菜单弹出后的CBA 与菜单背景
最终实现效果:
--[[User:Phoenixcuibj|Phoenixcuibj]] 03:28, 5 January 2011 (UTC) 欢迎补充指正!