The Badge component is a container that can be attached to another component for notification and reminder purposes.
This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version.
This component supports only one child component.
Allowed child component types: built-in and custom components, including rendering control types (if/else, ForEach, and LazyForEach).
A custom component defaults to a width and height of 0. You must explicitly set its width and height; otherwise, the Badge component will not be displayed.
When there are multiple child components, only the last child component is displayed on the UI. However, the status update of other child components will still cause the badge and its child components to be re-rendered.
Child component layout is independent and does not automatically adjust to avoid overlapping with the badge.
Badge(value: BadgeParamWithNumber)
Creates a badge with the given numerical value.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | BadgeParamWithNumber | Yes | Options of the numeric badge. |
Badge(value: BadgeParamWithString)
Creates a badge with the given string.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
This component supports the scaling effect for visibility transition since API version 12.
Parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
| value | BadgeParamWithString | Yes | Options of the string-type badge. |
Provides basic parameters for creating a badge.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
| Name | Type | Read-Only | Optional | Description |
|---|---|---|---|---|
| position | BadgePosition|Position10+ | No | Yes | Position to display the badge relative to the parent component. Default value: BadgePosition.RightTop NOTE With the Position type, percentage values are not supported. If an invalid value is set, the default value (0,0), which indicates the upper left corner of the component, will be used. With the BadgePosition type, the position is mirrored based on the Direction property. |
| style | BadgeStyle | No | No | Style of the badge, including the font color, font size, badge color, and badge size. |
Inherits from BadgeParam and has all attributes of BadgeParam.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
| Name | Type | Read-Only | Optional | Description |
|---|---|---|---|---|
| count | number | No | No | Number of notifications. NOTE If the value is less than or equal to 0 and less than the value of maxCount, no badge is displayed. Value range: [-2147483648, 2147483647]. If the value is out of the range, 4294967296 is added or subtracted so that the value is within the range. If the value is not an integer, it is rounded off to the nearest integer. For example, 5.5 is rounded off to 5. |
| maxCount | number | No | Yes | Maximum number of messages. If the number of messages exceeds the maximum, only maxCount+ is displayed. For example, if maxCount is 99, 99+ is displayed. Default value: 99 Value range: [-2147483648, 2147483647]. If the value is out of the range, 4294967296 is added or subtracted so that the value is within the range. If the value is not an integer, it is rounded off to the nearest integer. For example, 5.5 is rounded off to 5. |
Inherits from BadgeParam and has all attributes of BadgeParam.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
| Name | Type | Read-Only | Optional | Description |
|---|---|---|---|---|
| value | ResourceStr | No | No | Text string of the badge content. NOTE The ResourceStr type is supported since API version 20. |
Enumerates the display positions of a badge.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
| Name | Value | Description |
|---|---|---|
| RightTop | - | The badge is displayed in the upper right corner of the parent component. |
| Right | - | The badge is vertically centered on the right of the parent component. |
| Left | - | The badge is vertically centered on the left of the parent component. |
Describes the badge style. It includes the font color, font size, badge color, and badge size.
System capability: SystemCapability.ArkUI.ArkUI.Full
| Name | Type | Read-Only | Optional | Description |
|---|---|---|---|---|
| color | ResourceColor | No | Yes | Font color. Default value: Color.White Widget capability: This API can be used in ArkTS widgets since API version 9. Atomic service API: This API can be used in atomic services since API version 11. |
| fontSize | number | ResourceStr | No | Yes | Font size. The value of this parameter is a string of the number type. The unit can be px, vp, fp, or lpx, for example, 10 or 10fp. If no unit is specified, fp is used by default. Default value: 10vp The value must be greater than 0. If the value is 0, the text is not displayed. If the value is less than 0, the default value is used. NOTE 1. Percentage values are not supported. If a percentage value is set, the default value is used. 2. The ResourceStr type is supported since API version 20. Widget capability: This API can be used in ArkTS widgets since API version 9. Atomic service API: This API can be used in atomic services since API version 11. |
| badgeSize | number | ResourceStr | No | Yes | Badge size. For the string type, numeric string values with optional units, for example, "16" or "16fp", are supported. Default value: 16 Unit: vp The value must be greater than 0. If the value is 0, the badge is not displayed. If the value is less than 0, the default value is used. NOTE 1. Percentage values are not supported. If a percentage value is set, the default value is used. 2. The ResourceStr type is supported since API version 20. 3. If fontSize is set and badgeSize is smaller than fontSize, badgeSize will take effect based on the value of fontSize. Widget capability: This API can be used in ArkTS widgets since API version 9. Atomic service API: This API can be used in atomic services since API version 11. |
| badgeColor | ResourceColor | No | Yes | Badge color. Default value: Color.Red Widget capability: This API can be used in ArkTS widgets since API version 9. Atomic service API: This API can be used in atomic services since API version 11. |
| fontWeight10+ | number |FontWeight | ResourceStr | No | Yes | Font weight of the text. For the number type, the value ranges from 100 to 900, at an interval of 100. A larger value indicates a bolder font. For the number type, if the value is not within the range, the default value 400 is used. For the string type, only strings that represent a number, for example, 400, and the following enumerated values of FontWeight are supported: bold, bolder, lighter, regular, and medium. Default value: FontWeight.Normal NOTE Percentage values are not supported. If a percentage value is set, the default value is used. The ResourceStr type is supported since API version 20. Atomic service API: This API can be used in atomic services since API version 11. |
| borderColor10+ | ResourceColor | No | Yes | Color of the background border. Default value: Color.Red Atomic service API: This API can be used in atomic services since API version 11. |
| borderWidth10+ | Length | No | Yes | Width of the background border. Default value: 1 Unit: vp NOTE Percentage values are not supported. If a percentage value is set, the default value is used. Atomic service API: This API can be used in atomic services since API version 11. |
| outerBorderColor22+ | ResourceColor | No | Yes | Color of the background outer border. Default value: Color.White Atomic service API: This API can be used in atomic services since API version 22. |
| outerBorderWidth22+ | LengthMetrics | No | Yes | Width of the background outer border. Default value: 0. Unit: vp Percentage values are not supported. If a percentage value is set, the default value is used. Atomic service API: This API can be used in atomic services since API version 22. |
| enableAutoAvoidance22+ | boolean | No | Yes | Whether to enable avoidance when the badge text is extended. The value true means to enable avoidance, and false means the opposite. Default value: true. NOTE 1. The avoidance effect is that the badge text is extended to the inside of the component. 2. When the width of the outer border is greater than 0, the extension start point of the badge is the inner side of the outer border. 3. When position is set to a specific coordinate value, the badge does not perform avoidance. Atomic service API: This API can be used in atomic services since API version 22. |
When borderWidth is set to a value greater than 0 and borderColor is different from badgeColor, the badge is drawn before the border. Edge pixels are anti-aliased, which produces semi-transparent pixels. This causes the border in badgeColor to become visible at the four corners. To implement related scenarios, it is recommended that you use the Text component with its outline attribute instead of the Badge component.
This example uses the value parameter of BadgeParamWithNumber and the count parameter of BadgeParamWithString to display different effects when the Badge component receives an empty value, a character, or a number.
// xxx.ets
@Entry
@Component
struct BadgeExample {
@Builder
tabBuilder(index: number) {
Column() {
if (index === 2) {
Badge({
value: '',
style: { badgeSize: 6, badgeColor: '#FA2A2D' }
}) {
Image('/common/public_icon_off.svg')
.width(24)
.height(24)
}
.width(24)
.height(24)
.margin({ bottom: 4 })
} else {
Image('/common/public_icon_off.svg')
.width(24)
.height(24)
.margin({ bottom: 4 })
}
Text('Tab')
.fontColor('#182431')
.fontSize(10)
.fontWeight(500)
.lineHeight(14)
}.width('100%').height('100%').justifyContent(FlexAlign.Center)
}
@Builder
itemBuilder(value: string) {
Row() {
Image('common/public_icon.svg').width(32).height(32).opacity(0.6)
Text(value)
.width(177)
.height(21)
.margin({ left: 15, right: 76 })
.textAlign(TextAlign.Start)
.fontColor('#182431')
.fontWeight(500)
.fontSize(16)
.opacity(0.9)
Image('common/public_icon_arrow_right.svg').width(12).height(24).opacity(0.6)
}.width('100%').padding({ left: 12, right: 12 }).height(56)
}
build() {
Column() {
// Badge of the red dot type
Text('dotsBadge').fontSize(18).fontColor('#182431').fontWeight(500).margin(24)
Tabs() {
TabContent()
.tabBar(this.tabBuilder(0))
TabContent()
.tabBar(this.tabBuilder(1))
TabContent()
.tabBar(this.tabBuilder(2))
TabContent()
.tabBar(this.tabBuilder(3))
}
.width(360)
.height(56)
.backgroundColor('#F1F3F5')
// Create a badge with the given string.
Column() {
Text('stringBadge').fontSize(18).fontColor('#182431').fontWeight(500).margin(24)
List({ space: 12 }) {
ListItem() {
Text('list1').fontSize(14).fontColor('#182431').margin({ left: 12 })
}
.width('100%')
.height(56)
.backgroundColor('#FFFFFF')
.borderRadius(24)
.align(Alignment.Start)
ListItem() {
Badge({
value: 'New',
position: BadgePosition.Right,
style: { badgeSize: 16, badgeColor: '#FA2A2D' }
}) {
Text('list2').width(27).height(19).fontSize(14).fontColor('#182431')
}.width(49.5).height(19)
.margin({ left: 12 })
}
.width('100%')
.height(56)
.backgroundColor('#FFFFFF')
.borderRadius(24)
.align(Alignment.Start)
}.width(336)
// Create a badge with the given numerical value.
Text('numberBadge').fontSize(18).fontColor('#182431').fontWeight(500).margin(24)
List() {
ListItem() {
this.itemBuilder('list1')
}
ListItem() {
Row() {
Image('common/public_icon.svg').width(32).height(32).opacity(0.6)
Badge({
count: 1,
position: BadgePosition.Right,
style: { badgeSize: 16, badgeColor: '#FA2A2D' }
}) {
Text('list2')
.width(177)
.height(21)
.textAlign(TextAlign.Start)
.fontColor('#182431')
.fontWeight(500)
.fontSize(16)
.opacity(0.9)
}.width(240).height(21).margin({ left: 15, right: 11 })
Image('common/public_icon_arrow_right.svg').width(12).height(24).opacity(0.6)
}.width('100%').padding({ left: 12, right: 12 }).height(56)
}
ListItem() {
this.itemBuilder('list3')
}
ListItem() {
this.itemBuilder('list4')
}
}
.width(336)
.height(232)
.backgroundColor('#FFFFFF')
.borderRadius(24)
.padding({ top: 4, bottom: 4 })
.divider({
strokeWidth: 0.5,
color: 'rgba(0,0,0,0.1)',
startMargin: 60,
endMargin: 12
})
}.width('100%').backgroundColor('#F1F3F5').padding({ bottom: 12 })
}.width('100%')
}
} 
This example shows how to use the count property to toggle the visibility of the Badge component. Specifically, when the count property is set to 0, the badge is hidden; when it is set to 1, the badge becomes visible.
// This example implements scaling when the badge visibility changes.
@Entry
@Component
struct Index {
@State badgeCount: number = 1;
build() {
Column({ space: 40 }) {
Badge({
count: this.badgeCount,
style: {},
position: BadgePosition.RightTop,
}) {
Image($r('app.media.startIcon'))
.width(50)
.height(50)
}
.width(55)
Button('count 0').onClick(() => {
this.badgeCount = 0;
})
Button('count 1').onClick(() => {
this.badgeCount = 1;
})
}
.margin({ top: 20 })
}
} 
Since API version 22, this example uses the outerBorderColor and outerBorderWidth attributes to set the outer border, and uses the enableAutoAvoidance attribute to set whether to avoid the badge text extension.
// This example implements the custom outer border and text extension direction of the Badge component.
import { LengthMetrics } from '@kit.ArkUI';
@Entry
@Component
struct Index {
@State badgeValue: string = '1234';
@State textAvoid:boolean[] = [false, true];
@State textAvoidIndex: number = 0;
@State textAvoidString: string [] = ["false", "true"];
build() {
Column() {
Badge({
value: this.badgeValue,
style: {
badgeSize : 30,
fontSize:20,
outerBorderColor : Color.Pink,
outerBorderWidth : LengthMetrics.vp(5),
enableAutoAvoidance : this.textAvoid[this.textAvoidIndex]
},
position:BadgePosition.RightTop
}) {
// Replace $r('app.media.startIcon') with the image resource file you use.
Image($r("app.media.startIcon"))
.width(80)
.height(80)
}
.direction(Direction.Ltr)
.margin({ top: 20, bottom: 20 })
Button("enableAutoAvoidance : " + this.textAvoidString[this.textAvoidIndex])
.onClick(() => {
this.textAvoidIndex = (this.textAvoidIndex + 1) % this.textAvoidString.length;
})
}
.width('100%')
.height('80%')
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
}
} 