鸿蒙NEXT开发:ArkTS组件-通用属性(文本通用)

 往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


文本通用

文本通用属性目前只针对包含文本元素的组件,设置文本样式。

说明

从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

fontColor

fontColor(value: ResourceColor)

设置字体颜色。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueResourceColor字体颜色。

fontSize

fontSize(value: number | string | Resource)

设置字体大小。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueResource | number | string字体大小。fontSize为number类型时,使用fp单位。字体默认大小16fp。不支持设置百分比字符串。

fontStyle

fontStyle(value: FontStyle)

设置字体样式。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueFontStyle

字体样式。

默认值:FontStyle.Normal

fontWeight

fontWeight(value: number | FontWeight | string)

设置文本的字体粗细,设置过大可能会在不同字体下有截断。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueFontWeight | number | string

文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。string类型仅支持number类型取值的字符串形式,例如"400",以及"bold"、"bolder"、"lighter"、"regular"、"medium",分别对应FontWeight中相应的枚举值。

默认值:FontWeight.Normal

fontFamily

fontFamily(value: string | Resource)

设置字体列表。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueResource | string

字体列表。默认字体'HarmonyOS Sans'。

应用当前支持'HarmonyOS Sans'字体和注册自定义字体

卡片当前仅支持'HarmonyOS Sans'字体。

lineHeight

lineHeight(value: number | string | Resource)

设置文本的文本行高,设置值不大于0时,不限制文本行高,自适应字体大小。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueResource | number | string文本行高,为number类型时单位为fp。

decoration

decoration(value: DecorationStyleInterface)

设置文本装饰线样式及其颜色。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
valueDecorationStyleInterface12+

文本装饰线样式对象。

默认值:

{

type: TextDecorationType.None,

color: Color.Black,

style: TextDecorationStyle.SOLID

}

说明:

style参数不支持卡片能力。

示例

该示例通过fontColor、fontSize、fontStyle、fontWeight属性展示了不同样式的文本效果。

// xxx.ets
@Entry
@Component
struct TextStyleExample {
  build() {
    Column({ space: 8 }) {
      Text('default text')
      
      Text('text font color red').fontColor(Color.Red)
      
      Text('text font default')
      Text('text font size 10').fontSize(10)
      Text('text font size 10fp').fontSize('10fp')
      Text('text font size 20').fontSize(20)
      
      Text('text font style Italic').fontStyle(FontStyle.Italic)
      
      Text('text fontWeight bold').fontWeight(700)
      Text('text fontWeight lighter').fontWeight(FontWeight.Lighter)
      
      Text('red 20 Italic bold text')
        .fontColor(Color.Red)
        .fontSize(20)
        .fontStyle(FontStyle.Italic)
        .fontWeight(FontWeight.Bold)
      
      Text('Orange 18 Normal text')
        .fontColor(Color.Orange)
        .fontSize(18)
        .fontStyle(FontStyle.Normal)

      Text('text lineHeight 30')
        .lineHeight(30)
        .backgroundColor(Color.Gray)

      Text('text fontFamily HarmonyOS Sans')
        .fontFamily("HarmonyOS Sans")

      Text('Underline Black SOLID decoration text')
        .decoration({
          type: TextDecorationType.Underline,
          color: Color.Black,
          style: TextDecorationStyle.SOLID
        })
      Text('Overline Red DOTTED decoration text')
        .decoration({
          type: TextDecorationType.Overline,
          color: Color.Red,
          style: TextDecorationStyle.DOTTED
        })
      Text('LineThrough Orange SOLID decoration text')
        .decoration({
          type: TextDecorationType.LineThrough,
          color: Color.Orange,
          style: TextDecorationStyle.WAVY
        })
    }.width('100%')
  }
}

<think>嗯,用户提出了一个非常具体的鸿蒙开发问题,关于ArkTS中Text组件在无障碍适配时字体超出宽度的情况。这看起来是个实际开发中遇到的UI适配问题,用户应该正在做无障碍相关的功能开发。 从用户描述看,核心矛盾在于:启用系统大字体或缩放设置后,Text组件内的文字会超出容器边界。这确实是移动端无障碍适配的常见痛点,尤其在鸿蒙这种新兴系统上。 仔细分析问题,需要同时考虑三个技术点:Text组件本身的布局限制、无障碍字体缩放机制、以及鸿蒙特有的ArkTS API。用户提供的引用材料中,[引用2]提到的"组件区域变化事件"特别值得关注,这可能是解决问题的关键线索。 解决方案应该分层次设计:首先尝试用Text自带的属性控制,比如maxLines和textOverflow;如果不行再用布局容器包裹;最后考虑动态监听尺寸变化。其中onAreaChange事件(如引用2所述)可能是终极方案,但要注意API兼容性。 用户可能还隐藏了一个需求:希望保持文本完整显示而非截断,因为无障碍场景下截断文本会影响视障用户理解。所以方案中要优先考虑自动换行或缩放,而不是简单加省略号。 开发注意事项方面需要强调测试环节,因为不同厂商的系统字体设置差异很大。另外,鸿蒙的em单位换算可能和Android不同,这点要特别提醒。 最后生成的问题延伸了无障碍适配的不同方向:通用属性、事件机制和测试方法,覆盖了用户可能继续探索的路径。特别是滚动容器的方案,在复杂布局中很实用,值得单独讨论。</think>在鸿蒙开发中,使用ArkTS进行无障碍适配时解决Text组件字体超出宽度的问题,可通过以下方案实现: --- ### 解决方案 #### 1. **启用自动换行** 通过设置 `maxLines` 和 `textOverflow` 属性控制文本展示: ```typescript Text("长文本内容...") .maxLines(2) // 最多显示行数 .textOverflow({ overflow: TextOverflow.Ellipsis }) // 超出部分显示省略号 .fontSize(20) ``` #### 2. **动态缩放字体** 使用 `onAreaChange` 事件监听组件尺寸变化(参考[引用2]),动态调整字体大小: ```typescript @State textSize: number = 20 Text("长文本内容...") .fontSize(this.textSize) .onAreaChange((oldArea, newArea) => { // 当文本宽度 > 组件宽度时缩小字体 if (newArea.width > MAX_WIDTH) { this.textSize -= 1 } }) ``` #### 3. **结合滚动容器** 对超长文本使用 `Scroll` 容器实现横向滚动: ```typescript Scroll(.horizontal) { Text("超长无障碍文本内容...") .fontSize(20) } .width('100%') // 限制容器宽度 ``` #### 4. **使用 Flex 布局** 通过弹性布局自动压缩文本: ```typescript Flex({ justifyContent: FlexAlign.Start }) { Text("长文本内容...") .flexShrink(1) // 允许压缩 } .width('80%') // 固定容器宽度 ``` --- ### 关键注意事项 1. **无障碍适配测试** - 在手机设置中开启**大字体/无障碍模式**(字体大小调至150%+) - 使用系统提供的**屏幕朗读工具**验证文本可读性 2. **单位选择** 使用 `vp` 或 `fp` 等响应式单位确保字体自适应: ```typescript .fontSize(16) // 默认单位fp(字体像素) .fontSize('12fp') // 显式声明字体像素 ``` 3. **布局限制** 避免固定宽度,优先使用百分比或弹性宽度: ```typescript Text("...") .width('100%') // 响应父容器宽度 .maxWidth(500) // 设置安全上限 ``` --- ### 开发建议 - **优先方案**:`maxLines + textOverflow` 组合满足大部分场景 - **复杂场景**:结合 `onAreaChange` 实现动态缩放(需注意性能影响) - **极端情况**:对单行超长文本使用横向滚动容器 > 测试表明:在鸿蒙NEXT上,`maxLines` 属性对系统级字体缩放的支持度最佳,且能保持无障碍朗读功能完整[^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值