开发者静态注册时,需要在配置文件config.json声明支持的Complication类型,并在收到请求时,将对应类型的数据返回给表盘。
复杂数据按功能和样式分类,类型约束数据支持的功能,样式约束数据中包含的字段。在提供数据(含预览数据)时,开发者需要指定类型和模板,创建ComplicationEntity对象时需要提供这两个参数。
Complication Kit支持5种复杂数据类型Complication,分别为应用入口型、简单数值型、区间数值型、大尺寸数值型和列表数值型。
Complication Kit针对每种类型的复杂数据提供了不同模板ComplicationTemplate,开发者根据需要选取合适的模板。
类型 |
模板 |
Icon格式 |
Title长度(单位:字符数) |
Value长度(单位:字符数) |
---|---|---|---|---|
TYPE_NO_DATA |
TEMPLATE_EMPTY |
– |
– |
– |
TYPE_LAUNCHER |
TEMPLATE_LAUNCHER_ICON |
PNG(推荐108*108) |
– |
– |
TYPE_SIMPLE |
TEMPLATE_ICON_TEXT |
PNG(推荐52*52) |
– |
8 |
TEMPLATE_ICON_DIGIT |
PNG(推荐52*52) |
– |
– |
|
TEMPLATE_TITLE_TEXT |
– |
8 |
8 |
|
TEMPLATE_TITLE_DIGIT |
– |
8 |
– |
|
TEMPLATE_ICON_TITLE_DIGIT |
PNG(推荐52*52) |
8 |
– |
|
TEMPLATE_ICON_TITLE_TEXT |
PNG(推荐52*52) |
8 |
8 |
|
TYPE_RANGED |
TEMPLATE_ICON_RANGED |
PNG(推荐52*52) |
– |
– |
TEMPLATE_TITLE_RANGED |
– |
8 |
– |
|
TEMPLATE_ICON_TITLE_RANGED |
PNG(推荐52*52) |
8 |
– |
|
TYPE_LARGE |
TEMPLATE_ICON_LARGE |
PNG(推荐52*52) |
– |
32 |
TEMPLATE_TITLE_LARGE |
– |
20 |
32 |
|
TEMPLATE_ICON_TITLE_LARGE |
PNG(推荐52*52) |
20 |
32 |
|
TYPE_LIST |
TEMPLATE_ICON_LIST |
PNG(推荐52*52) |
– |
– |
TEMPLATE_TITLE_LIST |
– |
20 |
– |
|
TEMPLATE_ICON_TITLE_LIST |
PNG(推荐52*52) |
20 |
– |
其中,TYPE_RANGED和TYPE_LIST类型的值的具体限制如下:
VALUE |
字段 |
取值范围 |
备注 |
---|---|---|---|
RANGED |
max_value |
– |
取值为float类型 |
min_value |
– |
取值为float类型 |
|
cur_value |
– |
取值为float类型 |
|
LIST |
value_count |
[0-48] |
– |
value_list |
– |
取值为float类型 |
|
time_start |
整点或半点 |
– |
|
time_step |
[1-48] |
取值为30min的倍数,即 time_step*30min |
|
cur_value |
32个字符 |
– |
应用入口型
作为应用的启动入口,表盘上只展示应用的图标。可选择模板只有一个TEMPLATE_LAUNCHER_ICON,要求设置图标和点击事件。
setIcon:设置图标资源ID,此图标会被显示到表盘的Complication上,建议使用PNG格式。
setClickEvent :设置点击Complication后触发的IntentAgent,支持打开带参数的Page Ability。开发者可以为所有类型的Complication数据都设置点击事件,但是只有入口型是必选字段。
提供实时数据
public void onRefresh(int complicationIndex, int type, ComplicationCallback callback) {
ComplicationEntity entity = new ComplicationEntity.Builder(getApplicationContext(), Complication.TYPE_LAUNCHER, ComplicationTemplate.TEMPLATE_LAUNCHER_ICON)
.setIcon(ResourceTable.Media_ic_demo)
.setClickEvent(getClickEvent())
.build();
callback.refresh(complicationIndex, entity);
}
提供预览数据
<complication-data>
<complication type=“LAUNCHER” template=“launcher_icon”>
<icon>$media:ic_demo</icon>
</complication>
</complication-data>
此类型只支持一种模板,预览数据仅需提供icon。
简单数据型
表盘上展示单一数据,表盘上只展示开发者所定义的单一数据,例如步数、电量、日期等。可选择 TEMPLATE_ICON_TEXT, TEMPLATE_ICON_DIGIT, TEMPLATE_TITLE_TEXT, TEMPLATE_TITLE_DIGIT, TEMPLATE_ICON_TITLE_DIGIT, TEMPLATE_ICON_TITLE_TEXT六种模板。即图标和标题至少选择一个,数据类型可以是文本或数值,有且必须有其中一个。
setIcon:设置图标资源ID,此图标会被显示到表盘的Complication上。建议使用PNG格式,以便于表盘修改图标颜色。
setTitle:设置标题文本,文本长度最大为8个字符,一般为不频繁变化的提示性文字。
setTextValue:设置文本数据,文本长度最大为8个字符,一般为格式化的数据,比如”16米”。
setDigitValue:设置数值数据,数值为float类型,表盘显示时需要进行格式化。
setClickEvent :设置点击Complication后触发的IntentAgent,支持打开带参数的Page Ability。开发者可以为所有类型的Complication数据都设置点击事件,但是只有入口型是必选字段。
提供实时数据
public void onRefresh(int complicationIndex, int type, ComplicationCallback callback) {
ComplicationEntity entity = new ComplicationEntity.Builder(getApplicationContext(), Complication.TYPE_SIMPLE, ComplicationTemplate.TEMPLATE_ICON_DIGIT)
.setIcon(ResourceTable.Media_ic_demo)
.setDigitValue(1.2f)
.setClickEvent(getClickEvent())
.build();
callback.refresh(complicationIndex, entity);
}
提供预览数据
<complication-data>
<complication type=“SIMPLE” template=“icon_float_value”>
<icon>$media:ic_demo</icon>
<number>1.2f</number>
</complication>
<complication type=“SIMPLE” template=“icon_title_string_value”>
<icon>$media:ic_demo</icon>
<title>$string:demo_label</title>
<text>A demo value</text>
</complication>
</complication-data>
每种类型只需提供一个模板,请根据模板字段要求提供信息。
区间数据型
展示有区间范围的数据,表盘上展示区间数值的当前值和区间范围,一般为环形、弧形等类似进度条的图例,例如设定了目标的步数数据。开发者可以选择TEMPLATE_ICON_RANGED、TEMPLATE_TITLE_RANGED和TEMPLATE_ICON_TITLE_RANGED三种模板。即图标和标题至少选择一个,必须提供RangedValue数据。其中RangedValue包含最大值max_value、最小值min_value和当前值cur_value。
setIcon:设置图标资源ID,此图标会被显示到表盘的Complication上。建议使用PNG格式,以便于表盘修改图标颜色。
setTitle:设置标题文本,文本长度最大为8个字符,一般为不频繁变化的提示性文字。
setRangedValue:设置区间数据,包含最大值、最小值和当前值,用于类似进度图形的展示。
setClickEvent :设置点击Complication后触发的IntentAgent,支持打开带参数的Page Ability。开发者可以为所有类型的Complication数据都设置点击事件,但是只有入口型是必选字段。
提供实时数据
public void onRefresh(int complicationIndex, int type, ComplicationCallback callback) {
RangedValue rangedValue = new RangedValue(40, –20, 4);
ComplicationEntity entity = new ComplicationEntity.Builder(getApplicationContext(), Complication.TYPE_RANGED, ComplicationTemplate.TEMPLATE_TITLE_RANGED)
.setTitle(“Demo title”)
.setRangedValue(rangedValue)
.setClickEvent(getClickEvent())
.build();
callback.refresh(complicationIndex, entity);
}
提供预览数据
<complication-data>
<complication type=“RANGED” template=“title_ranged_value”>
<title>$string:demo_title</title>
<min-value>-20</min-value>
<max-value>40</max-value>
<current>4</current>
</complication>
<complication type=“RANGED” template=“icon_ranged_value”>
<icon>$media:ic_demo</icon>
<min-value>-20</min-value>
<max-value>40</max-value>
<current>4</current>
</complication>
</complication-data>
每种类型只需提供一个模板,请根据模板字段要求提供信息。
大尺寸数据
展示长文本数据,表盘会展示开发者所设定的长文本字段数据,例如会议安排、消息展示。开发者可以选择TEMPLATE_ICON_LARGE、TEMPLATE_TITLE_LARGE和TEMPLATE_TITLE_LARGE三种模板。即图标和标题至少选择一个,标题最长20个字符,必须提供一个长文本数据,长文本最长支持32个字符。
setIcon:设置图标资源ID,此图标会被显示到表盘的Complication上。建议使用PNG格式,以便于表盘修改图标颜色。
setTitle:设置标题文本,文本长度最大为20个字符,一般为不频繁变化的提示性文字。
setLongText:设置长文本数据,长文本最长支持32个字符,用于长文本数据的展示。
setClickEvent :设置点击Complication后触发的IntentAgent,支持打开带参数的Page Ability。开发者可以为所有类型的Complication数据都设置点击事件,但是只有入口型是必选字段。
提供实时数据
public void onRefresh(int complicationIndex, int type, ComplicationCallback callback) {
ComplicationEntity entity = new ComplicationEntity.Builder(getApplicationContext(), Complication.TYPE_LARGE, ComplicationTemplate.TEMPLATE_TITLE_LARGE)
.setIcon(ResourceTable.Media_ic_alarm)
.setTitle(“Demo title”)
.setLongText(“Next alarm: 2020-12-25 00:00”)
.setClickEvent(getClickEvent())
.build();
callback.refresh(complicationIndex, entity);
}
提供预览数据
<complication-data>
<complication type=“LARGE” template=“icon_title_large_value”>
<icon>$media:ic_alarm</icon>
<title>$string:demo_title</title>
<text>Next alarm: 2020-12-25 00:00</text>
</complication>
</complication-data>
每种类型只需提供一个模板,请根据模板字段要求提供信息。
列表数据型
展示列表数据,表盘会展示开发者定义的列表,常用于展示某阶段内数据的变化,例如一天的电量变化趋势、一个月的体温变化趋势等。开发者可以选择TEMPLATE_ICON_LIST、TEMPLATE_TITLE_LIST和TEMPLATE_ICON_TITLE_LIST三种模板。即图标和标题至少选择一个,标题最长20个字符,必须提供一个列表类型的数据。
列表类型的数据中包含数值数量value_count (范围为[0,48])、历史值value_list、开始时间time_start (起始时间为整点或者半点)、时间步长time_step (设定为30min的倍数,倍数范围为[1,48])和当前值cur_value (字符串长度为32)。
setIcon:设置图标资源ID,此图标会被显示到表盘的Complication上。建议使用PNG格式,以便于表盘修改图标颜色。
setTitle:设置标题文本,文本长度最大为20个字符,一般为不频繁变化的提示性文字。
setListValue:设置列表数据,用于变化趋势类数据的展示。
setClickEvent :设置点击Complication后触发的IntentAgent,支持打开带参数的Page Ability。开发者可以为所有类型的Complication数据都设置点击事件,但是只有入口型是必选字段。
提供实时数据
public void onRefresh(int complicationIndex, int type, ComplicationCallback callback) {
ListValue listValue = new ListValue(new float[]{1, 2, 3, 4}, System.currentTimeMillis(), 2, “1°C”);
ComplicationEntity entity = new ComplicationEntity.Builder(getApplicationContext(), Complication.TYPE_LIST, ComplicationTemplate.TEMPLATE_TITLE_LIST)
.setTitle(“Demo title”)
.setListValue(listValue)
.build();
callback.refresh(complicationIndex, entity);
}
提供预览数据
<complication-data>
<complication type=“LIST” template=“title_list_value”>
<title>$string:demo_title</title>
<values>
<item>1</item>
<item>8</item>
<item>3</item>
<item>6</item>
<item>4</item>
</values>
<time-start>1607333200000</time-start>
<time-step>1</time-step>
<text>4km</text>
</complication>
</complication-data>
每种类型只需提供一个模板,请根据模板字段要求提供信息。
支持多种数据类型
如果源数据不同,比如温度和空气质量,建议实现两个ComplicationProviderAbility分别提供数据。
如果源数据相同,但要支持不同的展示方式,比如温度数据,可以在一个ComplicationProviderAbility中支持两种Complication类型,分别显示当前温度简单数据和历史温度曲线两种UI。开发者需要:
在config.json添加类型
…
“metaData”: {
“customizeData”: [
{
“name”: “ohos.wearable.complication.COMPLICATION_TYPES”,
“value”: “SIMPLE,LIST”
},
…
]
}
…
在预览数据文件中,添加对应的预览数据
<complication-data>
<complication type=“SIMPLE” template=“title_string_value”>
…
</complication>
<complication type=“LIST” template=“title_list_value”>
…
</complication>
</complication-data>
在ComplicationProviderAbility代码中,根据表盘请求的数据类型返回对应类型的Complication数据。
注意事项
图标资源:在实时数据和预览数据中使用的图片资源,需要在resources/base/profile/remote.xml中进行声明,或者在config.json的COMPLICATION_PREVIEW_ICON中进行声明。前者适合多个图片的情形,后者适合只有一个图片的情形。
<remoteresources>
<item>$media:ic_demo_a</item>
<item>$media:ic_demo_b</item>
</remoteresources>
字符串资源:在预览数据中使用的字符串引用,需要在配置文件config.json中的COMPLICATION_PREVIEW_TITLE和COMPLICATION_PREVIEW_TEXT中进行声明。