我的划分将遵循您提出的基础组件、容器组件和媒体组件三大类,并为您详细阐述每一类的定义、包含的组件及其典型使用场景。


鸿蒙 (HarmonyOS) 内置组件分类

类别 核心职责 典型组件 比喻 文档依据
基础组件 构成界面的最小视觉和交互单元,是内容的直接承载者。 Text, Button, Image, Input, Slider, Switch, Progress 砖块、颜料、文字 《基础组件_*.pdf》 等多份文档
容器组件 组织和管理组件布局与结构,提供排列、嵌套、滚动等能力,本身通常是“不可见”的。 Column, Row, Stack, List, Tabs, GridRow, Swiper 脚手架、画布、文件夹 《容器组件_.pdf》, 《添加容器_.pdf》
媒体组件 专门用于播放、展示或控制多媒体内容的特定功能单元。 Video, Canvas 电视机、留声机、画板 《Video_*.pdf》, 《使用画布绘制自定义图形.pdf》

一、基础组件 (Basic Components)

  • 定义视图的原子单位。它们是用户能直接看到和交互的最小元素,用于展示文本、图片,或接收用户输入指令。它们通常作为叶子节点存在于组件树中,不再包含其他组件。
  • 核心特征:直接承载内容、提供独立交互。
  • 包含组件(根据文档列举):
    • 文本展示: Text, Span, Marquee (跑马灯), RichText, Qrcode, Rating (评分)
    • 图像展示: Image, ImageAnimator (帧动画)
    • 输入控制: Button, Toggle (切换按钮), Slider (滑块), Switch (开关), Input, TextArea, Search, Picker, DatePicker
    • 进度指示: Progress, LoadingProgress
    • 图表: Chart
    • 分隔: Divider (分割线)
  • 典型使用场景:
    
      
    Column() {
      Text('Hello World') // 文本组件
        .fontSize(20)
      Image($r('app.media.icon')) // 图像组件
        .width(100)
        .height(100)
      Button('Click Me') // 按钮组件
        .onClick(() => {
          // 处理点击事件
        })
      Slider({ value: 50, min: 0, max: 100 }) // 滑块组件
    }
    

二、容器组件 (Container Components)

  • 定义组件的组织者。它们本身通常没有可见内容(或仅有简单的背景、边框),其主要作用是定义布局规则,对子组件进行排列、分组、滚动或切换管理。它们是构建复杂界面结构的骨架。
  • 核心特征:管理布局、容纳子组件、提供交互框架。
  • 包含组件(根据文档列举):
    • 线性布局: Column (垂直排列), Row (水平排列), Flex (弹性布局)
    • 层叠布局: Stack (堆叠)
    • 列表布局: List, ListItem, ListItemGroup, WaterFlow (瀑布流)
    • 导航布局: Tabs, TabContent, Swiper (轮播), Navigation, Stepper (步骤器)
    • 响应式栅格布局: GridRow, GridCol
    • 相对布局: RelativeContainer
    • 特殊容器: Scroll (滚动), Refresh (下拉刷新), Popup (弹窗), Dialog (对话框), SideBarContainer (侧边栏)
  • 典型使用场景:
    
      
    // 使用 Column 垂直排列子组件
    Column() {
      // 使用 Row 水平排列子组件
      Row() {
        Text('Left')
        Text('Right')
      }
    
      // 使用 Stack 层叠子组件(如文字在图片上)
      Stack() {
        Image($r('app.media.bg'))
        Text('Watermark')
      }
    
      // 使用 List 渲染长列表
      List() {
        ForEach(this.itemList, (item) => {
          ListItem() {
            Text(item.name)
          }
        })
      }
    }
    

三、媒体组件 (Media Components)

  • 定义多媒体内容的专用载体。这类组件功能高度特化,专注于处理复杂的音视频播放或图形绘制,内部封装了强大的媒体引擎或渲染能力。
  • 核心特征:功能专一、处理复杂媒体流、与系统底层媒体服务紧密交互。
  • 包含组件(根据文档列举):
    • 视频播放: Video (支持播放、暂停、控制等)
    • 图形绘制: Canvas (提供画布,可通过 CanvasRenderingContext2D 绘制自定义图形、动画)
  • 典型使用场景:
    
      
    // 播放视频
    Video({
      src: ' https://example.com/sample.mp4 ',
      controller: this.videoController
    })
      .width('100%')
      .height(300)
    
    // 使用画布绘制图形
    Canvas(this.context)
      .width('100%')
      .height(300)
      .onReady(() => {
        this.context.beginPath()
        this.context.arc(100, 100, 50, 0, 6.28)
        this.context.stroke()
      })
    

总结与补充说明

这种分类方式清晰地体现了鸿蒙UI开发的层次化设计思想

  1. 容器组件搭建页面的骨架和结构(Layout)。
  2. 基础组件作为肌肉和皮肤,填充到骨架中,提供具体的内容和交互(Content & Interaction)。
  3. 媒体组件则是嵌入其中的功能器官,负责处理特定的高性能任务(Specialized Function)。

关于其他组件:您提供的文档中还提到了SVG组件(如svg, circle, path)和栅格组件grid-container等)。它们可以按其功能归入以上分类:

  • SVG组件用于绘制矢量图形,可视为更强大的基础组件
  • grid-container是用于布局的,应归为容器组件

这种分类方法有助于开发者在构建界面时,更有条理地选择合适的工具,先规划布局(容器),再填充内容(基础),最后嵌入复杂功能(媒体)。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐