组合视图控件 (SComboView)¶
Warning
The current page still doesn't have a translation for this language.
You can read it through google translate.
SOUI 中的组合视图控件,它继承 SComboBase,在下拉框中嵌入一个 SListView 作为内容,从而支持在下拉区域展示虚拟化列表(自定义模板、大量数据)。SComboView 自身没有新增 XML 属性,全部属性来自基类 SComboBase,下拉内容由内嵌的 listview 模板决定。
基本信息¶
- 类名:
SComboView - 控件标签:
comboview - 基类:
SComboBase(TComboBaseProxy<IComboView>) - 功能:提供下拉式自定义列表视图选择功能
重要纠正:旧文档列出的
dropWidth属性在SComboBase源码中不存在——下拉框只有dropHeight(高度),宽度默认跟随控件自身宽度。其余属性(下拉、按钮皮肤、动画、提示文字、匹配等)来自SComboBase。
属性说明¶
SComboView 继承 SComboBase::SOUI_ATTRS_BEGIN 中的全部属性:
继承属性(来自 SComboBase)¶
| 属性名 | 类型 | 默认值 | 是否重绘 | 说明 |
|---|---|---|---|---|
dropDown |
自定义 | true |
— | 是否为下拉式(true 下拉列表,false 等同普通编辑框) |
dropHeight |
layoutsize | 200(dp) |
是 | 下拉框高度 |
curSel |
int | -1 |
否 | 初始选中项索引 |
btnSkin |
skin | 系统皮肤 SKIN_SYS_DROPBTN |
是 | 下拉按钮皮肤 |
animateTime |
int | 200 |
否 | 下拉/收起动画时长(毫秒) |
autoFitDropBtn |
int | true |
是 | 是否自动适配下拉按钮尺寸 |
cueColor |
color | #cccccc |
是 | 提示文字(cueText)颜色 |
cueText |
string | ""(空) |
是 | 未选择时的提示文字 |
autoMatch |
bool | false |
否 | 输入时是否自动匹配项 |
autoDropdown |
bool | false |
否 | 输入时是否自动展开下拉框 |
下拉内容模板¶
下拉区域是一个 SListView,通过 <liststyle> / <template> 子节点定义项模板:
<comboview pos="10,10,200,40" name="combo_basic"
dropHeight="200" cueText="请选择...">
<liststyle>
<template itemHeight="30">
<text pos="5,|-15" name="txt_name"/>
</template>
</liststyle>
</comboview>
使用示例¶
comboview = SComboBox 的下拉区域换成了一个内嵌的 listview,因此下拉项同样是模板 + 适配器驱动。editstyle 决定输入区,下拉内容由 liststyle 内的 <template> 决定,数据用 ILvAdapter(SAdapterBase)。
1. XML¶
<comboview pos="10,10,200,40" name="combo_search"
dropHeight="240" cueText="搜索..." autoMatch="1">
<editstyle inset="5,0,5,0" colorBkgnd="#FFFFFF"/>
<liststyle>
<template itemHeight="60">
<window>
<img name="img_icon" pos="5,5,55,55" skin="skin_default_personal32"/>
<text name="txt_title" pos="65,10" font="bold:1"/>
<text name="txt_desc" pos="65,35" colorText="#666666"/>
</window>
</template>
</liststyle>
</comboview>
2. 实现下拉项适配器(C++)¶
#include <helper/SAdapterBase.h>
#include <control/SComboView.h>
struct Cand { SStringT strTitle; SStringT strDesc; };
class CSearchAdapter : public SAdapterBase
{
public:
void Add(const Cand &c) { m_items.Add(c); notifyDataSetChanged(); }
protected:
virtual int WINAPI getCount() override { return m_items.GetCount(); }
virtual void WINAPI getView(int position, SItemPanel *pItem,
SXmlNode xmlTemplate) override
{
if (pItem->GetChildrenCount() == 0)
pItem->InitFromXml(&xmlTemplate);
const Cand &c = m_items[position];
pItem->FindChildByName2<SStatic>(L"txt_title")->SetWindowText(c.strTitle);
pItem->FindChildByName2<SStatic>(L"txt_desc")->SetWindowText(c.strDesc);
}
private:
SArray<Cand> m_items;
};
3. 绑定与取值¶
void InitCombo(SComboView *pCombo)
{
CSearchAdapter *pAdapter = new CSearchAdapter;
pAdapter->Add({_T("张三"), _T("在线")});
pAdapter->Add({_T("李四"), _T("离线")});
pCombo->SetAdapter(pAdapter);
pAdapter->Release();
pCombo->SetCurSel(0);
}
// 下拉项被选中时(订阅 EventCBSelChanged / EventCmd)
void OnSelChanged(SComboView *pCombo)
{
int iSel = pCombo->GetCurSel();
SListView *pLV = pCombo->GetListView();
// 通过 pLV->GetAdapter() 取回适配器读取对应数据
}
SComboView::SetAdapter作用于内嵌的listview;其余下拉框行为(按钮皮肤、动画、提示文字、匹配)由基类SComboBase的 XML 属性控制。