当前位置: 首页 > news >正文

HarmonyOS 6 Badge 组件自定义外描边和文本延伸方向使用示例文档

文章目录

    • 组件功能概述
    • 核心 API 与参数
      • 1. Badge 组件扩展配置(外描边 + 文本避让)
      • 2. 关键工具类/枚举
    • 代码分段解析
      • 1. 状态变量定义
      • 2. Badge 核心配置(外描边 + 文本避让)
      • 3. 交互按钮(切换文本避让状态)
      • 4. 整体布局
    • 效果展示
    • 总结

组件功能概述

本示例基于 HarmonyOS ArkTS 实现了 Badge 标记组件的两大核心自定义能力:

  1. 为 Badge 标记添加自定义样式的外描边(边框颜色、宽度);
  2. 控制 Badge 文本超出标记尺寸时的自动避让(延伸)行为。
    通过交互按钮可切换文本避让开关状态,直观展示不同配置下的视觉效果,适用于需要个性化标记样式、适配长文本展示的场景(如多位数数字标记、自定义风格角标等)。

核心 API 与参数

1. Badge 组件扩展配置(外描边 + 文本避让)

参数/样式属性类型说明
outerBorderColorColor外描边颜色,示例中设置为粉色(Color.Pink)
outerBorderWidthLength外描边宽度,示例中通过LengthMetrics.vp(5)设为 5vp
enableAutoAvoidanceboolean是否开启文本自动避让:
-false:文本超出 Badge 尺寸时被截断/挤压;
-true:文本超出时自动向外侧延伸展示
badgeSizenumberBadge 标记基础尺寸(宽高),示例中设为 30vp
fontSizenumberBadge 内部文本字号,示例中设为 20vp
positionBadgePositionBadge 相对于子组件的位置,示例中为RightTop(右上)
directionDirection文本延伸方向,示例中为Ltr(从左到右)

2. 关键工具类/枚举

  • LengthMetrics.vp():将数值转换为 vp 单位(鸿蒙自适应尺寸单位),保证多设备适配;
  • BadgePosition.RightTop:Badge 显示在子组件的右上角;
  • Direction.Ltr:文本延伸方向为从左到右(默认);
  • Color.Pink:鸿蒙内置颜色常量,也可自定义十六进制颜色(如#FFC0CB)。

代码分段解析

1. 状态变量定义

@State badgeValue: string = '1234'; // Badge 显示的文本内容(长文本用于测试延伸效果) @State textAvoid:boolean[] = [false, true]; // 文本避让开关状态列表 @State textAvoidIndex: number = 0; // 切换状态的索引 @State textAvoidString: string [] = ["false", "true"]; // 状态对应的文本展示值

说明

  • badgeValue: '1234'选择4位数字,超出 Badge 基础尺寸(30vp),可直观体现文本避让效果;
  • textAvoid数组存储两种开关状态,通过textAvoidIndex切换,实现交互演示。

2. Badge 核心配置(外描边 + 文本避让)

Badge({ value: this.badgeValue, style: { badgeSize : 30, // 标记基础尺寸30vp fontSize:20, // 文本字号20vp(接近标记尺寸,易触发超出场景) outerBorderColor : Color.Pink, // 外描边颜色:粉色 outerBorderWidth : LengthMetrics.vp(5), // 外描边宽度:5vp enableAutoAvoidance : this.textAvoid[this.textAvoidIndex] // 文本避让开关(动态切换) }, position:BadgePosition.RightTop // 标记显示在子组件右上角 }) { // 子组件:示例图片(需替换为开发者自有资源) Image($r("app.media.startIcon")) .width(80) .height(80) } .direction(Direction.Ltr) // 文本延伸方向:从左到右 .margin({ top: 20, bottom: 20 })

核心配置说明

  • 外描边样式outerBorderColor + outerBorderWidth组合实现粉色粗描边,让 Badge 标记更醒目,适配个性化UI设计;
  • 文本避让enableAutoAvoidance绑定动态状态,false时“1234”文本会因超出 30vp 标记尺寸被挤压/截断,true时文本自动向右延伸展示完整内容;
  • 位置与方向RightTop保证标记在图片右上角,Direction.Ltr定义文本延伸方向为从左到右。

3. 交互按钮(切换文本避让状态)

Button("enableAutoAvoidance : " + this.textAvoidString[this.textAvoidIndex]) .onClick(() => { // 点击切换索引,循环切换 false/true 状态 this.textAvoidIndex = (this.textAvoidIndex + 1) % this.textAvoidString.length; })

说明

  • 按钮文本实时显示当前enableAutoAvoidance状态;
  • 点击事件通过取模运算实现textAvoidIndex在 0/1 之间循环,从而切换文本避让开关。

4. 整体布局

build() { Column() { // Badge 组件区域 ... // 交互按钮区域 ... } .width('100%') .height('80%') .alignItems(HorizontalAlign.Center) // 水平居中 .justifyContent(FlexAlign.Center) // 垂直居中 }

说明:整体采用 Column 纵向布局,将 Badge 和按钮居中展示,保证视觉聚焦,便于查看状态切换效果。

效果展示

enableAutoAvoidance状态效果描述
false(默认)Badge 标记为 30vp 粉色描边(5vp)方块,“1234”文本因字号 20vp 超出尺寸,被挤压在标记内(部分字符可能截断);
trueBadge 标记基础尺寸不变,“1234”文本自动向右延伸,完整展示所有字符,描边跟随文本延伸区域适配;

效果运行如图:

点击按钮变为true:

总结

  1. 资源替换:示例中$r("app.media.startIcon")需替换为开发者项目内的图片资源(如本地 svg/png 格式),否则会导致图片加载失败;
  2. 尺寸适配badgeSizefontSize需合理搭配,建议文本字号不超过标记尺寸的 70%,避免未开启避让时文本过度挤压;
  3. 描边宽度outerBorderWidth不宜设置过大(如超过 10vp),否则会覆盖 Badge 内部文本,影响可读性;
  4. 延伸方向direction(Direction.Ltr)仅控制文本延伸方向,需结合position(如 RightTop/RightBottom)选择,避免延伸方向与父组件重叠;
  5. 状态切换textAvoidIndex取模运算(% this.textAvoidString.length)保证索引不越界,是循环切换状态的通用写法。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力

http://www.jsqmd.com/news/712853/

相关文章:

  • NCM文件快速免费转换终极指南:ncmdump让网易云音乐自由播放
  • Codeforces Round 1094 Div. 1 + Div. 2(A~F)
  • AutoQ-VIS:无监督视频实例分割的质量引导自训练框架
  • intodns:终端里的DNS与邮件安全自动化审计工具
  • 2026年3招降AI实操指南:亲测AI率降至10%以下,附免费降AI率工具(建议收藏) - 降AI实验室
  • Jasminum终极指南:3步解决Zotero中文文献管理的核心痛点
  • 2026年市面AI一键生成简历哪个好用?
  • YOLOv13涨点改进| AAAI 2026 |全网独家创新、Conv卷积改进篇|引入MECM记忆专家补偿模块,通过多个专家和记忆库的联合作用,助力YOLOv13小目标检测,图像分割,图像增强高效涨点
  • 爱普生TX720wd,L4168,L4153,Artisan725,TX725,TX820,L558,L555,L565,L805,L3556打印机中的废墨垫已到使用寿命,亲测有用
  • 深入解析KeymouseGo:跨平台鼠标键盘自动化脚本录制与执行的专业指南
  • 别再死记硬背了!用这个‘色环电阻速查表’和口诀,3秒读出阻值(附高清图)
  • 基于VIBE模型实现视频3D人体姿态估计:从原理到实战部署
  • 辽宁省CPPM官方报名中心授权机构及联系方式(官方正规报名通道) - 中供国培
  • ViGEmBus虚拟手柄驱动:Windows游戏手柄模拟终极解决方案
  • 3个关键步骤掌握Dell G15终极散热:开源Thermal Control Center完全解决方案
  • 3分钟掌握AlwaysOnTop:让任意窗口永远保持在最前端的终极方案
  • 2026年10款降AI率工具深度测评|降AI收藏必备指南 - 降AI实验室
  • 3分钟上手!downkyi绿色版:你的B站视频下载终极解决方案
  • 【硬件工程师视角】
  • Linux实时调度优化与PREEMPT_RT性能调优实践
  • 前端铺子开发者小程序在线课堂+工具组件小程序uniapp移动端
  • WindowsCleaner:终极免费系统清理工具,3步告别C盘爆红困扰
  • 终极免费方案:让Windows电脑变身专业级AirPlay 2接收器
  • LattePanda 3 Delta开发板:x86与Arduino的异构计算实践
  • 使用YOLOv5与千问3.5-9B构建多模态问答系统
  • 大功率台式机混合冷却散热器仿真与理论计算全解
  • 别再死记硬背命令了!AutoCAD 2020图层、捕捉、约束三大辅助工具实战指南
  • Windows Cleaner:3分钟解决C盘爆红问题,让电脑重获新生
  • 04月27日AI每日参考:Sora正式关闭,小米机器人开源,DeepSeek再降价
  • 忍者像素绘卷:5分钟零基础上手,打造你的16位复古游戏角色