文档开发者中心
我的
|

ArkUI (方舟UI框架)

OpenHarmony

HarmonyOS 5

ArkTS

在Row组件中,Text组件如何实现放大字体时,始终保持居中放大的效果

在Row组件中,Text组件的fontSize是通过Button动态改变的,如何实现放大字体时,始终保持居中放大的效果,当前是未超过父容器时是居中的,超过之后,文本向右放大

cke_896.png

点赞
收藏
回复
17
分享
举报
浏览271 发布于2025-11-05 05:48浙江
全部评论
最多点赞
最新发布
最早发布
|
技术支持

Text不能往左延伸是因为父组件的offset都在屏内,想要Text的宽度能在超过屏幕宽度时还居中显示,父组件的offset(左顶点)需要在屏外,可以设置外层容器宽度大一些。示例代码如下:

收起
自动换行
深色代码主题
复制
@Entry
@Component
struct TextComponent {
  @State textFontSize: number = 24;
  build() {
    Column({ space: 16 }) {
      Column(){
        Row() {
          Text('开发者你好')
            .fontSize(this.textFontSize)
            .fontColor('rgba(0,85,255,1)')
            .fontWeight(FontWeight.Normal)
            .opacity(1)
            .letterSpacing(0)
            .textShadow({ radius: 0 })
            .maxLines(1)

          Text('开发者你好')
            .fontSize(this.textFontSize)
            .fontColor('rgba(0,85,255,1)')
            .fontWeight(FontWeight.Normal)
            .opacity(1)
            .letterSpacing(0)
            .textShadow({ radius: 0 })
            .maxLines(1)

          Text('开发者你好')
            .fontSize(this.textFontSize)
            .fontColor('rgba(0,85,255,1)')
            .fontWeight(FontWeight.Normal)
            .opacity(1)
            .letterSpacing(0)
            .textShadow({ radius: 0 })
            .maxLines(1)
        }
      }.width(2000)
      .onClick(()=>{
        this.textFontSize++;
      })

      Column({ space: 8 }) {
        Text('字号')
        Slider({
          value: $$this.textFontSize,
          min: 12, // 最小字号
          max: 58, // 最大字号
          step: 1,
        })
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.SpaceAround)
  }
}
展开全部
10楼回复于2025-11-20 02:29 来自广东
收起
自动换行
深色代码主题
复制
@Entry
@Component
struct TextComponent {
  @State textFontSize: number = 24

  build() {
    Column({ space: 16 }) {
      Text('开发者你好')
        .fontSize(this.textFontSize)
        .fontColor('rgba(0,85,255,1)')
        .fontWeight(FontWeight.Normal)
        .opacity(1)
        .letterSpacing(0)
        .textShadow({ radius: 0 })

      Column({ space: 8 }) {
        Text('字号')

        Slider({
          value: $$this.textFontSize,
          min: 12, // 最小字号
          max: 58, // 最大字号
          step: 1,
        })
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.SpaceAround)
  }
}
1
8楼回复于2025-11-07 01:22 来自浙江
  • Coke
    文本长一点,就能看到跟安卓的区别
    2025-11-07 06:56 来自浙江
android实现效果可以看下,字体放大可以向两边无限延伸
attachmenttype
android效果.zip
download
1
7楼回复于2025-11-06 01:13 来自浙江
  • SummerKaze
    实现效果请参考 8楼 示例组件。
    2025-11-07 01:23 来自浙江
你好,开发者看到你这边想实现字体放大始终居中的方式,其实可以stack组件,不要用row,stack可以固定是居中布局的,这样就能满足你想要的效果了
6楼回复于2025-11-05 15:58 来自广东
你好,你所描述的需求是否是 HMOS代码工坊 里的文本示例。如果不是能否提供一个演示的视频。
cke_123.png
1
5楼回复于2025-11-05 09:49 来自浙江
  • Coke
    可以看下我的评论有android视频
    2025-11-06 01:13 来自浙江
方法1是可以实现,但是我希望的是随着字体变大,是这样的效果cke_189.png
1
4楼回复于2025-11-05 08:39 来自浙江
  • SummerKaze
    请查看我 5楼 的回复
    2025-11-05 09:50 来自浙江

开发者你好,放大字体「始终居中放大」的关键是指定缩放中心为组件中心。可用通用变换属性的 scale 并设置中心点,或用容器居中+位移补偿。

思路一:使用 scale 指定缩放中心(推荐)

  • 在 Text 上使用 scale,并设置中心点到组件中点,避免放大时向右偏移。
  • 同时保证父容器居中对齐。

示例要点:

  • Row 居中:.justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center)
  • Text 居中:.textAlign(TextAlign.Center)
  • 核心:.scale({ x: factor, y: factor, centerX: '50%', centerY: '50%' })

参考文档:scale(通用变换属性)

思路二:容器居中 + 位移补偿

  • 若放大后仍有视觉偏移,可在外层用 Stack/Column 居中,并对 Text 做细微 translate 补偿(依据字体增量的一半向反方向平移),同时保持 textAlign(TextAlign.Center)。
  • 场景:复杂字体/字形或动态字体切换时,单纯中心缩放出现轻微漂移。

参考文档


如果以上方案对您有帮助,欢迎采纳答案,也欢迎继续提问交流!🙏

1
3楼回复于2025-11-05 07:13 来自浙江
  • Coke
    看一下我的回复,安卓的实现效果
    2025-11-05 08:39 来自浙江

设置Row宽度和水平居中,同时设置Text 组件宽度100%、水平居中显示。

Row(){

     Text('文字内容‘)

.width('100%')

.textAlign(TextAlign.Center)

}.width('100%')

.justifyContent(FlexAlign.Center)

2楼回复于2025-11-05 07:10 来自广西
能把示例代码发一下吗
3
1楼回复于2025-11-05 05:51 来自北京
  • Coke
    就是我描述的那样,row不设置宽高,完全由里面的Text的fontsize来决定大小,居中显示,然后点击按钮动态改变fontSize就能实现
    2025-11-05 05:57 来自浙江
  • 郭小洁回复Coke
    有没有在row()里加上.alignItems(HorizontalAlign.Center)
    2025-11-05 06:17 来自北京
  • Coke回复郭小洁
    没有,这是设置子组件垂直方向的对齐方式
    2025-11-05 06:40 来自浙江
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要提问题

了解社区公约,与您携手共创和谐专业的开发者社区。