
1. 鸿蒙5 折线图 tooltip 提示框到底解决什么问题在鸿蒙5 上做数据看板折线图几乎是绕不开的组件。莓创图表的 McLineChart 折线图能把多条趋势线画得很顺滑但真正决定「好不好用」的往往是手指按上去那一刻弹出的 tooltip 提示框。它是什么就是你在折线图上长按或滑动时跟随手指出现的小浮层里面显示当前 X 轴刻度、每个系列的数值和颜色标记。它能做什么把密密麻麻的折线还原成可读的数字让用户不用去猜某个点到底是多少。适合谁适合正在鸿蒙应用里做健康数据、气温趋势、销售曲线、设备监控这类折线图的开发者尤其是已经用上 McLineChart、但发现默认提示框样式和业务 UI 对不上的同学。我见过不少项目折线本身画得没问题可 tooltip 要么背景太透明看不清要么指示线颜色和主题冲突要么干脆不显示。问题基本都出在 tooltip 这一层属性没配对。莓创图表的 tooltip 配置项其实相当完整show 控制开关padding 控制内边距backgroundColor、borderWidth、borderColor 控制外观axisPointer 控制指示器是直线还是阴影textStyle 控制文字animationCurve 和 animationFrame 控制动画甚至还能用 customTooltip 完全自定义内容。把这些串起来你就能做出和设计稿一致的悬浮提示。这一篇就围绕 McLineChart 的 tooltip 属性从场景出发给出可复制的配置代码再讲怎么在鸿蒙5 设备上验证请求和渲染结果最后把常见的报错和排查路径列清楚。你可以边看边把代码贴进自己的工程里跑一遍。2. 接入前的准备TaoToken 与莓创图表环境在动手写 tooltip 之前先把两件事理清楚一是图表组件本身的依赖二是如果你打算在调试阶段用大模型辅助生成配置或排查报错怎么把模型调用接进来。莓创图表通过mcui/mccharts引入在鸿蒙5 的 ArkTS 工程里用ohpm或直接在oh-package.json5里声明依赖即可。McLineChart、Options、chartInterface 这几个是核心导出tooltip 的所有配置都挂在Options的tooltip字段下。至于模型调用很多同学在写 tooltip 配置时会遇到「属性名记不住、颜色值拿不准、报错看不懂」的情况这时候用一个稳定的 API 入口来问模型会省很多时间。TaoToken 提供的就是这样一个入口官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。它的作用是把你的请求转发到合适的模型上你只需要拿到一个 Key填好 Base URL 和 Model ID就能在脚本或工具里调用。注意这里说的是「调用模型来辅助你写代码」不是让模型去连你的生产数据库两者别混。具体到操作你可以先到控制台创建一个 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 然后在 API Keys 页面复制出以sk-开头的密钥页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。如果你只是想先验证某个模型能不能正确回答 tooltip 属性问题可以直接用模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 试一句「McLineChart 的 axisPointer.type 有哪些取值」。要是你打算长期用模型辅助编码、跑 Agent 任务可以看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。这里要强调一个原则TaoToken 是模型调用的入口不是用来替代 DevEco Studio 或编辑器的。你的 ArkTS 代码还是在本地工程里写模型只是帮你补全配置、解释报错。把 Key 和 Base URL 配好之后后面排查 tooltip 不显示、颜色不对这类问题时就能让模型快速给出候选原因。3. 可复制的 tooltip 配置从基础属性到自定义提示层这一节是重点直接给可复制的代码。先看一个综合了大部分 tooltip 属性的Options配置你可以整段贴进State seriesOption里。注意路径和字段名要和莓创图表保持一致tooltip是Options的一级字段。import { McLineChart, Options } from mcui/mccharts Entry Component struct Index { State maxData: number[] [11, 11, 15, 13, 12, 130, 10] State minData: number[] [1, -20, 2, 5, 3, 2, 0] State seriesOption: Options new Options({ tooltip: { show: true, padding: 12, backgroundColor: rgba(50,50,80,0.85), borderWidth: 1, borderColor: #409EFF, axisPointer: { type: line, lineStyle: { width: 2, type: dashed, color: #409EFF } }, textStyle: { color: #FFFFFF, fontWeight: normal, fontFamily: Arial, fontSize: 14 }, animationCurve: easeOutCubic, animationFrame: 200 }, xAxis: { data: [周一,周二,周三,周四,周五,周六,周日] }, yAxis: { name: 温度(℃) }, series: [ { name: 最高气温, data: this.maxData }, { name: 最低气温, data: this.minData } ] }) build() { Row() { McLineChart({ options: this.seriesOption }) } .height(50%) } }这段配置里show是总开关设为false就完全禁用提示框padding默认 10内容多的时候调到 12 到 15 更舒服backgroundColor默认是rgba(0,0,0,0.7)我习惯用带一点蓝调的深色和折线主题呼应borderWidth默认 0加 1px 边框能让浮层在浅色背景上更清晰borderColor配合边框使用。axisPointer.type有两个取值line是直线指示器shadow是阴影区域折线图一般用line柱状图更适合shadow。当 type 为line时lineStyle里的width、typesolid/dashed/dotted、color分别控制指示线的粗细、线型和颜色。如果你要用阴影指示器把axisPointer换成下面这样axisPointer: { type: shadow, shadowStyle: { color: rgba(100,100,100,0.3), borderWidth: 1, borderColor: #409EFF } }shadowStyle的color默认是rgba(150,150,150,0.2)borderWidth默认 0borderColor默认和 color 一致。阴影模式在折线图上用得少但做区间高亮时很有用。文字样式这块textStyle的color默认#ffffontWeight支持normal、bold、lighter、bolder或 100 到 900 的数字fontFamily默认sans-seriffontSize默认 14。动画方面animationCurve默认easeOutCubicanimationFrame默认 0设成 200 到 300 毫秒会有明显的淡入淡出。内置样式不够用时用customTooltip完全自定义。下面这个Builder会遍历$$.tooltipInfo.data把每个系列的名称、颜色圆点和数值都画出来import { McLineChart, Options, chartInterface } from mcui/mccharts Entry Component struct Index { State tooltipOption: Options new Options({ xAxis: { data: [周一,周二,周三,周四,周五,周六,周日] }, series: [ { name: 最高气温, data: [11, 11, 15, 13, 12, 130, 10] }, { name: 最低气温, data: [1, -20, 2, 5, 3, 2, 0] } ] }) Builder customTooltip($$: chartInterface.InterfaceObj) { Column() { if ($$.tooltipInfo.title) { Text($$.tooltipInfo.title) .fontSize(16) .fontWeight(FontWeight.Bold) .margin({ bottom: 8 }) } ForEach($$.tooltipInfo.data, (item: chartInterface.InterfaceObj, index: number) { Row() { Circle({ width: 10, height: 10 }) .fill(item.color) .margin({ right: 8 }) Text(item.name : ) .fontSize(14) Text(item.num.toString()) .fontSize(14) .fontColor(#409EFF) } .margin({ top: 4, bottom: 4 }) }) } .padding(12) .backgroundColor(#FFFFFF) .borderRadius(8) .shadow({ radius: 8, color: #888888, offsetX: 2, offsetY: 2 }) } build() { Row() { McLineChart({ options: this.tooltipOption, customTooltip: this.customTooltip }) } .height(50%) } }自定义提示层的关键是chartInterface.InterfaceObj里的tooltipInfo它包含title和data数组每个 data 项有name、num、color。你可以在Builder里任意布局圆角、阴影、图标都能加。4. 在鸿蒙5 设备上验证 tooltip 渲染结果配置写完得在真机或模拟器上验证。第一步把上面的代码放进 DevEco Studio 的 ArkTS 工程确认oh-package.json5里已经声明了mcui/mccharts依赖然后 Sync 一次。第二步连接鸿蒙5 设备或启动模拟器点击运行。第三步等折线图渲染出来后用手指在折线上长按并左右滑动观察 tooltip 是否跟随出现。验证时重点看几个点提示框背景色是不是你设的rgba(50,50,80,0.85)边框是不是 1px 的#409EFF指示线是不是 2px 的蓝色虚线文字是不是白色 14 号。如果用了customTooltip检查标题、颜色圆点、数值是否都正确显示。再验证动画快速滑动时提示框应该有 200ms 的淡入淡出而不是生硬地闪现。数据动态更新也要测。在aboutToAppear里加一个定时器2 秒后调用setVal更新 series 数据看 tooltip 里的数值是否跟着变aboutToAppear() { setTimeout(() { this.maxData [110, 110, 150, 130, 120, 190, 100] this.minData [-1, -2, -2, -5, 3, -2, 0] this.seriesOption.setVal({ series: [ { name: 最高气温, data: this.maxData }, { name: 最低气温, data: this.minData } ] }) }, 2000) }实测下来setVal之后 tooltip 会读取最新的 series 数据不需要重建整个 Options。如果你发现数值没更新先确认setVal的字段路径和初始化时一致。如果你在验证过程中想用模型帮你解释某个属性或生成一段配置可以打开模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 把报错或需求贴进去。需要 Key 的话去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 拿接入细节看文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。这样验证和排错能形成闭环。5. 常见报错与排查401、local proxy failed、reading choicestooltip 相关的报错一部分来自图表配置本身一部分来自你调用模型辅助时的接口问题。先看图表侧。如果 tooltip 完全不显示第一检查show是不是被设成了false第二检查axisPointer的type是否拼写正确第三确认series里有数据。如果提示框显示了但位置偏移多半是padding或自定义Builder的布局问题。再看接口侧。调用模型时最常见的几个报错我按真实遇到的顺序列一下。401 Unauthorized通常是 Key 没填对或没带上检查请求头里的Authorization: Bearer sk-xxxKey 从 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 复制注意不要多空格。local proxy failed一般出现在你本地配了转发但目标地址写错的情况确认 Base URL 是 https://taotoken.net/api 不要多加路径或斜杠。reading choices这类报错说明返回体结构和预期不符可能是 Model ID 填错了或者请求体里messages格式不对检查model字段和messages数组。如果你用的是 Codex 或类似工具auth.json里要写全三件套Base URL、Key、Model ID。Base URL 填 https://taotoken.net/api Key 填sk-开头的字符串Model ID 按你实际要用的模型名填。三者缺一不可少一个就会报 401 或 reading choices。OAuth 相关的报错通常出现在 Claude Code 这类工具里如果你走的是 Key 认证就不需要 OAuth 流程确认工具里选的是 API Key 模式而不是 OAuth 模式。排查顺序建议这样先确认 Key 有效再确认 Base URL 正确再确认 Model ID 存在最后看请求体格式。每一步都可以用模型对话页单独发一条最简单的请求来验证比如只发「你好」能正常返回就说明链路通了。链路通了之后再回去调 tooltip 配置问题范围就小很多。6. 把 tooltip 配置沉淀成可复用模板tooltip 这套属性看起来多但真正高频用的就那么几个show、padding、backgroundColor、borderColor、axisPointer.lineStyle、textStyle。我的做法是把它抽成一个函数传入主题色和字号返回一个 tooltip 配置对象这样多个图表能共用同一套视觉规范。比如function buildTooltip(themeColor: string, fontSize: number): object { return { show: true, padding: 12, backgroundColor: rgba(50,50,80,0.85), borderWidth: 1, borderColor: themeColor, axisPointer: { type: line, lineStyle: { width: 2, type: dashed, color: themeColor } }, textStyle: { color: #FFFFFF, fontSize: fontSize } } }然后在Options里用tooltip: buildTooltip(#409EFF, 14)引用。这样改主题色只需要改一个地方。如果你需要长期用模型辅助生成这类模板Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 会更合适配合接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 把 Base URL、Key、Model ID 配好后面写配置、查报错都能省不少时间。最后提醒一句自定义customTooltip里的ForEach记得给 key数据量大时避免重复渲染。