• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Badge
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @liyujie43-->
5<!--Designer: @weixin_52725220-->
6<!--Tester: @xiong0104-->
7<!--Adviser: @HelloCrease-->
8
9信息标记组件,可以附加在单个组件上用于信息提醒的容器组件。
10
11>  **说明:**
12>
13> 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15
16## 子组件
17
18支持单个子组件。
19
20>  **说明:**
21>
22>  子组件类型:系统组件和自定义组件,支持渲染控制类型([if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)、[ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)和[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md))。
23>  自定义组件宽高默认为0,需要给其设置宽高,否则标记组件将不显示。
24
25
26## 接口
27
28### Badge
29
30Badge(value: BadgeParamWithNumber)
31
32根据数字创建标记组件。
33
34**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
35
36**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
37
38**系统能力:** SystemCapability.ArkUI.ArkUI.Full
39
40**参数:**
41
42| 参数名 | 类型 | 必填 | 说明 |
43| -------- | -------- | -------- | -------- |
44| value |  [BadgeParamWithNumber](#badgeparamwithnumber对象说明)| 是 | 数字标记组件参数。|
45
46### Badge
47
48Badge(value: BadgeParamWithString)
49
50根据字符串创建标记组件。
51
52**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
53
54**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
55
56**系统能力:** SystemCapability.ArkUI.ArkUI.Full
57
58从API version 12开始,该组件显隐时支持scale动效。
59
60**参数:**
61
62| 参数名 | 类型                                              | 必填 | 说明             |
63| ------ | ----------------------------------------------------- | ---- | -------------------- |
64| value  | [BadgeParamWithString](#badgeparamwithstring对象说明) | 是   | 字符串标记组件参数。 |
65
66## BadgeParam对象说明
67
68包含用于创建Badge组件的基础参数。
69
70**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
71
72**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
73
74**系统能力:** SystemCapability.ArkUI.ArkUI.Full
75
76| 名称 | 类型 | 只读 | 可选 | 说明 |
77| -------- | -------- | -------- | -------- | -------- |
78| position | [BadgePosition](#badgeposition枚举说明)\|[Position<sup>10+</sup>](ts-types.md#position) | 否 | 是 | 设置提示点显示位置。<br/>默认值:BadgePosition.RightTop <br/>**说明:** <br/> Position作为入参,不支持设置百分比;设置为非法值时,默认(0,0)处理。(0,0)为组件左上角位置。<br/>BadgePosition作为入参时,会跟随[Direction](ts-appendix-enums.md#direction)属性控制镜像显示。|
79| style | [BadgeStyle](#badgestyle对象说明) | 否 | 否 | Badge组件可设置样式,支持设置文本颜色、尺寸、圆点颜色和尺寸。 |
80
81
82## BadgeParamWithNumber对象说明
83
84BadgeParamWithNumber继承自[BadgeParam](#badgeparam对象说明),具有BadgeParam的全部属性。
85
86**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
87
88**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
89
90**系统能力:** SystemCapability.ArkUI.ArkUI.Full
91
92| 名称 | 类型 | 只读 | 可选 | 说明 |
93| -------- | -------- | -------- | -------- | -------- |
94| count | number | 否 | 否 | 设置提醒消息数。<br/>**说明:** <br/>当该值小于等于0且小于maxCount时不显示信息标记。<br/>取值范围:[-2147483648,2147483647]。超出范围时会加上或减去4294967296,使得值仍在范围内,非整数时会舍去小数部分取整数部分,如5.5取5。 |
95| maxCount | number | 否 | 是 | 最大消息数,超过最大消息时仅显示maxCount+。<br/>默认值:99<br/>取值范围:[-2147483648,2147483647]。超出范围时会加上或减去4294967296,使得值仍在范围内,非整数时会舍去小数部分取整数部分,如5.5取5。 |
96
97## BadgeParamWithString对象说明
98
99BadgeParamWithString继承自[BadgeParam](#badgeparam对象说明),具有BadgeParam的全部属性。
100
101**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
102
103**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
104
105**系统能力:** SystemCapability.ArkUI.ArkUI.Full
106
107| 名称 | 类型 | 只读 | 可选 | 说明 |
108| -------- | -------- | -------- | -------- | -------- |
109| value | [ResourceStr](ts-types.md#resourcestr) | 否 | 否 | 提示内容的文本字符串。<br/>**说明:** <br/>从API version 20开始,支持ResourceStr类型。 |
110
111## BadgePosition枚举说明
112
113提示点显示位置。
114
115**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
116
117**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
118
119**系统能力:** SystemCapability.ArkUI.ArkUI.Full
120
121| 名称 | 值 | 说明 |
122| -------- | -------- |-------- |
123| RightTop | - | 圆点显示在右上角。 |
124| Right | - | 圆点显示在右侧纵向居中。 |
125| Left | - | 圆点显示在左侧纵向居中。 |
126
127## BadgeStyle对象说明
128
129Badge的样式。
130
131**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
132
133**系统能力:** SystemCapability.ArkUI.ArkUI.Full
134
135| 名称                      | 类型                                                         | 只读 | 可选 | 说明                                                         |
136| ------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
137| color                     | [ResourceColor](ts-types.md#resourcecolor)                   | 否   | 是   | 文本颜色。<br/>默认值:Color.White<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
138| fontSize                  | number&nbsp;\|&nbsp;[ResourceStr](ts-types.md#resourcestr)   | 否   | 是   | 文本大小。string类型仅支持number类型取值的字符串形式,可以附带单位,例如"10"、"10fp"。<br/>默认值:10<br/>单位:fp<br/>取值范围:大于0;取值为0时不显示文本,取值小于0时取默认值。<br/>**说明:** <br/>不支持设置百分比,当设置为百分比时,按照默认值处理。从API version 20开始,支持ResourceStr类型。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
139| badgeSize                 | number&nbsp;\|&nbsp;[ResourceStr](ts-types.md#resourcestr)   | 否   | 是   | Badge的大小。string类型支持number类型取值的字符串形式,可以附带单位,例如"16"、"16vp"。<br/>默认值:16<br/>单位:vp<br/>取值范围:大于0;取值为0时不显示Badge,取值小于0时取默认值。<br/>**说明:** <br/>不支持设置百分比,当设置为百分比时,按照默认值处理。从API version 20开始,支持ResourceStr类型。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
140| badgeColor                | [ResourceColor](ts-types.md#resourcecolor)                   | 否   | 是   | Badge的颜色。<br/>默认值:Color.Red<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
141| fontWeight<sup>10+</sup>  | number \|[FontWeight](ts-appendix-enums.md#fontweight) \|&nbsp;[ResourceStr](ts-types.md#resourcestr) | 否   | 是   | 设置文本的字体粗细。number类型取值范围:[100, 900],取值间隔为100。取值越大,字体越粗。设置number类型在取值范围外时,按默认值400处理。string类型仅支持number类型取值的字符串形式,例如"400",以及"bold"、"bolder"、"lighter"、"regular"、"medium",分别对应FontWeight中相应的枚举值。<br/>默认值:FontWeight.Normal<br/>**说明:** <br/>不支持设置百分比,当设置为百分比时,按照默认值处理。从API version 20开始,支持ResourceStr类型。 |
142| borderColor<sup>10+</sup> | [ResourceColor](ts-types.md#resourcecolor)                   | 否   | 是   | 底板描边颜色。<br/>默认值:Color.Red                         |
143| borderWidth<sup>10+</sup> | [Length](ts-types.md#length)                                 | 否   | 是   | 底板描边粗细。<br/>默认值:1<br/>单位:vp<br/>**说明:** <br/>不支持设置百分比,当设置为百分比时,按照默认值处理。 |
144
145> **说明:**
146> 当`borderWidth`大于0且`borderColor`与`badgeColor`颜色不一致时,先绘制角标,再绘制描边。由于边缘像素经过抗锯齿处理,抗锯齿产生半透明像素,四角会出现 `badgeColor` 颜色的描边线。如需实现相关场景,建议使用[Text](ts-basic-components-text.md)组件设置[outline](ts-universal-attributes-outline.md)代替Badge组件。
147
148## 属性
149
150支持[通用属性](ts-component-general-attributes.md)。
151
152## 事件
153
154支持[通用事件](ts-component-general-events.md)。
155
156## 示例
157
158### 示例1(设置标记组件内容)
159
160该示例通过value和count属性,实现了传入空值、字符、数字时标记组件展现不同的效果。
161
162```ts
163// xxx.ets
164@Entry
165@Component
166struct BadgeExample {
167  @Builder
168  tabBuilder(index: number) {
169    Column() {
170      if (index === 2) {
171        Badge({
172          value: '',
173          style: { badgeSize: 6, badgeColor: '#FA2A2D' }
174        }) {
175          Image('/common/public_icon_off.svg')
176            .width(24)
177            .height(24)
178        }
179        .width(24)
180        .height(24)
181        .margin({ bottom: 4 })
182      } else {
183        Image('/common/public_icon_off.svg')
184          .width(24)
185          .height(24)
186          .margin({ bottom: 4 })
187      }
188      Text('Tab')
189        .fontColor('#182431')
190        .fontSize(10)
191        .fontWeight(500)
192        .lineHeight(14)
193    }.width('100%').height('100%').justifyContent(FlexAlign.Center)
194  }
195
196  @Builder
197  itemBuilder(value: string) {
198    Row() {
199      Image('common/public_icon.svg').width(32).height(32).opacity(0.6)
200      Text(value)
201        .width(177)
202        .height(21)
203        .margin({ left: 15, right: 76 })
204        .textAlign(TextAlign.Start)
205        .fontColor('#182431')
206        .fontWeight(500)
207        .fontSize(16)
208        .opacity(0.9)
209      Image('common/public_icon_arrow_right.svg').width(12).height(24).opacity(0.6)
210    }.width('100%').padding({ left: 12, right: 12 }).height(56)
211  }
212
213  build() {
214    Column() {
215      // 红点类型的标记组件
216      Text('dotsBadge').fontSize(18).fontColor('#182431').fontWeight(500).margin(24)
217      Tabs() {
218        TabContent()
219          .tabBar(this.tabBuilder(0))
220        TabContent()
221          .tabBar(this.tabBuilder(1))
222        TabContent()
223          .tabBar(this.tabBuilder(2))
224        TabContent()
225          .tabBar(this.tabBuilder(3))
226      }
227      .width(360)
228      .height(56)
229      .backgroundColor('#F1F3F5')
230
231      // 根据字符创建的标记组件
232      Column() {
233        Text('stringBadge').fontSize(18).fontColor('#182431').fontWeight(500).margin(24)
234        List({ space: 12 }) {
235          ListItem() {
236            Text('list1').fontSize(14).fontColor('#182431').margin({ left: 12 })
237          }
238          .width('100%')
239          .height(56)
240          .backgroundColor('#FFFFFF')
241          .borderRadius(24)
242          .align(Alignment.Start)
243
244          ListItem() {
245            Badge({
246              value: 'New',
247              position: BadgePosition.Right,
248              style: { badgeSize: 16, badgeColor: '#FA2A2D' }
249            }) {
250              Text('list2').width(27).height(19).fontSize(14).fontColor('#182431')
251            }.width(49.5).height(19)
252            .margin({ left: 12 })
253          }
254          .width('100%')
255          .height(56)
256          .backgroundColor('#FFFFFF')
257          .borderRadius(24)
258          .align(Alignment.Start)
259        }.width(336)
260
261        // 根据数字创建的标记组件
262        Text('numberBadge').fontSize(18).fontColor('#182431').fontWeight(500).margin(24)
263        List() {
264          ListItem() {
265            this.itemBuilder('list1')
266          }
267
268          ListItem() {
269            Row() {
270              Image('common/public_icon.svg').width(32).height(32).opacity(0.6)
271              Badge({
272                count: 1,
273                position: BadgePosition.Right,
274                style: { badgeSize: 16, badgeColor: '#FA2A2D' }
275              }) {
276                Text('list2')
277                  .width(177)
278                  .height(21)
279                  .textAlign(TextAlign.Start)
280                  .fontColor('#182431')
281                  .fontWeight(500)
282                  .fontSize(16)
283                  .opacity(0.9)
284              }.width(240).height(21).margin({ left: 15, right: 11 })
285
286              Image('common/public_icon_arrow_right.svg').width(12).height(24).opacity(0.6)
287            }.width('100%').padding({ left: 12, right: 12 }).height(56)
288          }
289
290          ListItem() {
291            this.itemBuilder('list3')
292          }
293
294          ListItem() {
295            this.itemBuilder('list4')
296          }
297        }
298        .width(336)
299        .height(232)
300        .backgroundColor('#FFFFFF')
301        .borderRadius(24)
302        .padding({ top: 4, bottom: 4 })
303        .divider({
304          strokeWidth: 0.5,
305          color: 'rgba(0,0,0,0.1)',
306          startMargin: 60,
307          endMargin: 12
308        })
309      }.width('100%').backgroundColor('#F1F3F5').padding({ bottom: 12 })
310    }.width('100%')
311  }
312}
313```
314
315![badge](figures/badge.png)
316
317### 示例2(设置数字控制标记显隐)
318
319该示例通过count属性,实现了设置数字0和1时标记组件的隐藏和显示效果。
320
321```ts
322// 该示例实现了Badge组件显隐时缩放
323@Entry
324@Component
325struct Index {
326  @State badgeCount: number = 1;
327
328  build() {
329    Column({ space: 40 }) {
330      Badge({
331        count: this.badgeCount,
332        style: {},
333        position: BadgePosition.RightTop,
334      }) {
335        Image($r("app.media.startIcon"))
336          .width(50)
337          .height(50)
338      }
339      .width(55)
340
341      Button('count 0').onClick(() => {
342        this.badgeCount = 0;
343      })
344      Button('count 1').onClick(() => {
345        this.badgeCount = 1;
346      })
347    }
348    .margin({ top: 20 })
349  }
350}
351```
352
353![badgeScale](figures/badgeScale.gif)
354