Symbian学习笔记(11):初识SettingItemList

本文介绍如何在S60平台使用资源文件快速构建配置页面。通过派生CAknSettingItemList类并结合RSS文件,实现了自动下载选项及时间设置等功能。文章详细展示了代码实现过程与资源文件配置细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在BREW中要做一个配置窗口是非常麻烦的事情,而S60的配置列表却相当方便。尤其是利用资源文件来构造配置页,在RSS中写的东西有点复杂但是代码却简化了不少。

先看简单的代码,需要自己构造一个SettingItemList类派生于CAknSettingItemList即可:

classCUniNewsSettingItemList:publicCAknSettingItemList
...{
public:
voidConstructL();
CAknSettingItem
*CreateSettingItemL(TIntaIdentifier);

public:
TBooliDown;
TTimeiTime;
}
;

其中,iDown和iTime是两个需要配置的内容(这个例子中我需要在配置页让用户选择“是否自动下载”以确定“自动下载的时间”。)

然后在实现代码中这样:
voidCUniNewsSettingItemList::ConstructL()
...{
CAknSettingItemList::ConstructFromResourceL(R_CFG_ITEM_LIST);
}

CAknSettingItem
*CUniNewsSettingItemList::CreateSettingItemL(TIntaIdentifier)
...{
CAknSettingItem
*settingItem=NULL;

switch(aIdentifier)
...{
caseEMySettingItemBinary:
settingItem
=
new(ELeave)CAknBinaryPopupSettingItem(
aIdentifier,iDown);
break;
caseEMySettingItemTime:
settingItem
=
new(ELeave)CAknTimeOrDateSettingItem(
aIdentifier,CAknTimeOrDateSettingItem::ETime,iTime);
break;
}


returnsettingItem;
}

在ConstructL中简单地调用基类的函数从资源中生成配置页,而在CreateSettingItemL函数里根据aIdentifier去资源文件中读取相应的描述来生成配置项。
创建一个BOOL配置项可用CAknBinaryPopupSettingItem,它在构造函数第二个参数就是iDown成员,这样关联一下就把这个配置项与成员iDown关联上了,同理,创建一个

CAknTimeOrDateSettingItem实例,与iTime成员关联上。相关的配置项有很多,在SDK中可以找到它们的说明:API Reference Guide/C++API Reference/UI Framework/Setting Pages API。

代码差不多就这样了,使用与普通的ListBox没什么两样,只需要在保存和加载时注意一下即可。

在显示配置页时,记得先iListBox->LoadSettingsL()一下就让iListBox从成员变量中加载数据,而在保存时也同样iListBox->StoreSettingsL()让成员变量从配置页中得到配置结果。

现在来看看RSS中的描述,相对于代码来说,这稍有点复杂了。
RESOURCEAVKON_VIEWr_view_cfg
{
cba
=R_AVKON_SOFTKEYS_DONE_CANCEL;
}
RESOURCEAVKON_SETTING_ITEM_LISTr_cfg_item_list
{
flags
=EAknSettingItemNumberedStyle;
title
=qtn_cfg_title;
initial_number
=1;
items
=
{
AVKON_SETTING_ITEM
{
identifier
=EMySettingItemBinary;
setting_page_resource
=r_binary_setting_page;
associated_resource
=r_popup_setting_binary_texts;
name
=qtn_cfg_autodown;
}
,
AVKON_SETTING_ITEM
{
identifier
=EMySettingItemTime;
setting_page_resource
=r_time_setting_page;
name
=qtn_cfg_autotime;
}
};
}
RESOURCEAVKON_SETTING_PAGEr_binary_setting_page
{
number
=1;
label
=qtn_cfg_autodown;
type
=EAknCtPopupSettingList;
editor_resource_id
=r_binary_popup_setting_list;
}
RESOURCEAVKON_POPUP_SETTING_TEXTSr_popup_setting_binary_texts
{
flags
=0;
setting_texts_resource
=r_on_off_texts;
popped_up_texts_resource
=r_popped_up_on_off_texts;
}
RESOURCEARRAYr_on_off_texts
{
items
=
{
AVKON_ENUMERATED_TEXT{value
=1;text=qtn_cfg_autodown_on;},
AVKON_ENUMERATED_TEXT{value
=0;text=qtn_cfg_autodown_off;}
};
}
RESOURCEARRAYr_popped_up_on_off_texts
{
items
=
{
LBUF{txt
=qtn_cfg_autodown_on;},
LBUF{txt
=qtn_cfg_autodown_off;}
};
}
RESOURCEPOPUP_SETTING_LISTr_binary_popup_setting_list
{
flags
=0;
}
RESOURCEAVKON_SETTING_PAGEr_time_setting_page
{
number
=2;
label
=qtn_cfg_autotime;
type
=EEikCtTimeEditor;
editor_resource_id
=r_settinglist_time_editor;
}

RESOURCETIME_EDITORr_settinglist_time_editor
{
minTime
=TIME
{
second
=0;
minute
=0;
hour
=0;
};
maxTime
=TIME
{
second
=59;
minute
=59;
hour
=23;
};
}

我也是按网上找到的资料来改写的。虽然看上去有点多,不过看明白了其实还是相当有规律的,应该比在代码中写大堆的东西要简便一点。
其实也可以完全在代码中动态生成配置页而不依靠资源文件中的描述。但是那样做太复杂了,我以后再去研究吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值