欢迎光临
我们一直在努力

第五篇 | ArkUI 阅读页技术实现:文章模型、长文滚动、字号控制和双列适配

摘要

本文分析“转盘决定吧”的阅读小站实现。它不是简单堆 Text,而是包含文章模型、内容服务、手机单列布局、平板双列布局、字号行高联动和长文滚动。

1. 文章模型设计

阅读文章使用结构化模型:

interface ReadingArticle {

  id: string;

  title: string;

  summary: string;

  tag: string;

  minutes: number;

  paragraphs: string[];

}

为什么正文用 paragraphs 数组?

渲染时段落间距可控

朗读时可以拼接全文

后续可做阅读进度

长文不会挤成一整块

2. 内容服务 ReadingLibrary

这样页面只负责展示,内容来源由 service 管理。

3. 断点判断

阅读页通过全局断点状态适配设备:

@StorageProp('currentBreakpoint') currentBp: string = 'sm';

private isWide(): boolean {

  return this.currentBp !== 'sm';

}

手机:

正文在上

文章列表在下

整体可滚动

平板和 2 合 1:

左侧文章列表

右侧正文阅读区

4. 最大内容宽度

大屏不能无限拉伸:

private maxContentWidth(): string {

  if (this.currentBp === 'lg') {

    return '1120vp';

  }

  if (this.currentBp === 'md') {

    return '840vp';

  }

  return '100%';

}

阅读体验里,行长过长会明显降低可读性。

5. 字号和行高联动

字号状态:

@State fontStep: number = 0;

计算正文大小:

private bodyFontSize(): number {

  return 16 + this.fontStep;

}

private bodyLineHeight(): number {

  return 27 + this.fontStep * 2;

}

字号增大时行高也要增大,否则文字会显得拥挤。

6. 长文滚动区域

正文必须放在 Scroll 中:

Scroll() {

  Column() {

    ForEach(this.selectedArticle().paragraphs, (paragraph: string) => {

      Text(paragraph)

        .fontSize(this.bodyFontSize())

        .lineHeight(this.bodyLineHeight())

        .margin({ bottom: 16 });

    })

  }

}

.layoutWeight(1)

这是小屏、横屏和窗口缩放下保持内容可达的关键。

7. 技术结论

阅读页的技术重点是内容结构化和布局自适应。把文章模型、内容服务、字号控制、滚动区域和断点布局拆开,后面接 SpeechKit 朗读时会非常自然。再帮帮孩子吧,我这个应用用代码一个一个敲出来的,帮忙到应用市场下载一个评论一下体验一哈,谢谢支持,转盘决定吧

赞(0)
未经允许不得转载:171主机测评 » 第五篇 | ArkUI 阅读页技术实现:文章模型、长文滚动、字号控制和双列适配
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址