跳转至

ui_view_group

ui_view_group 模块提供视图容器基类,在视图基类基础上增加子视图添加、移除与遍历等容器管理能力。

Class Summary

OHOS::UIViewGroup

表示一个由子视图组成的视图组,子视图可以添加、插入和移除,后添加的子视图显示在视图组的上层,所有子视图存储在链表中。

Functions

OHOS::UIViewGroup

GetViewType

UIViewType GetViewType() const override

功能说明

  • 核心用途:获取当前视图的类型标识
  • 返回值为 UI_VIEW_GROUP,定义于 UIViewType 枚举中
  • 该函数为 const 成员函数,不修改对象状态

返回值

  • 返回类型:UIViewType

返回视图类型标识

返回值 触发场景
UI_VIEW_GROUP(1) 当前对象为 UIViewGroup 实例

Add

virtual void Add(UIView* view)

功能说明

  • 核心用途:向视图组中添加子视图,子视图被追加到链表末尾
  • 添加后子视图的 parent 指向当前视图组,若启用了自适应大小则自动调整视图组尺寸
  • 不允许添加自身、不允许添加 nullptr、不允许重复添加同一子视图

入参

名称 参数类型 详细说明 约束取值范围
view UIView* 入参指针,指向待添加的子视图 不为 nullptr,不能为 this 自身,不能已有 parent

Insert

virtual void Insert(UIView* prevView, UIView* insertView)

功能说明

  • 核心用途:在指定子视图后插入新子视图
  • 若 prevView 为 nullptr,则将新子视图插入到链表头部;若子视图链表为空,则调用 Add 添加
  • 插入后更新渲染链表和子视图数量,若启用自适应大小则自动调整

入参

名称 参数类型 详细说明 约束取值范围
prevView UIView* 入参指针,指定前一个子视图的位置 可为 nullptr(插入到头部)
insertView UIView* 入参指针,指向待插入的新子视图 不为 nullptr,不能为 this 自身,不能已有 parent

Remove

virtual void Remove(UIView* view)

功能说明

  • 核心用途:从视图组中移除指定子视图
  • 移除后子视图的 parent 和 nextSibling 置为 nullptr,同时从渲染链表中移除
  • 移除后更新子视图数量,若启用自适应大小则自动调整

入参

名称 参数类型 详细说明 约束取值范围
view UIView* 入参指针,指向待移除的子视图 不为 nullptr,须为当前视图组的子视图

RemoveAll

virtual void RemoveAll()

功能说明

  • 核心用途:移除视图组中所有子视图
  • 遍历子视图链表,将每个子视图的 parent、nextSibling、nextRenderSibling 均置为 nullptr
  • 清空后子视图链表头尾指针和渲染头指针均置为 nullptr,子视图数量归零

RemoveAndDeleteAllRecursively

static void RemoveAndDeleteAllRecursively(UIViewGroup*& group)

功能说明

  • 核心用途:递归移除并删除视图组及其所有子视图
  • 对于特定类型(如 UIPicker、UITimePicker、UIImagePicker、UIDigitalClock、UIRollerView、UICoverFlow、UIMenuItem、UIList、UIOptionBox、UIVideo)直接 delete 整个 group
  • 对于 UICrossView、UICardContainer、UISlipflowView 类型需手动删除其他子视图后调用
  • 对于普通视图组,递归遍历子视图链表,若子视图为视图组则递归调用自身,否则直接 delete

入参

名称 参数类型 详细说明 约束取值范围
group UIViewGroup*& 入参引用指针,指向待递归删除的视图组 不为 nullptr

Kconfig 配置

配置项 说明 默认值
ENABLE_FOCUS_MANAGER 启用焦点管理器 -

GetTargetView

void GetTargetView(const Point& point, UIView** last) override

功能说明

  • 核心用途:根据给定坐标获取可见且可响应触摸事件的目标子视图
  • 若视图组设置了拦截触摸事件标志(disallowIntercept),则返回 nullptr
  • 遍历渲染链表查找包含指定坐标且可响应的子视图

入参

名称 参数类型 详细说明 约束取值范围
point const Point& 入参只读引用,指定坐标 -
last UIView** 出参指针,指向获取到的目标视图 不为 nullptr,可被写入 nullptr 表示未获取到

出参

名称 数据类型 输出说明
last UIView** 出参指针,由被调用方写入目标视图指针或 nullptr

GetTargetView

void GetTargetView(const Point& point, UIView** current, UIView** target) override

功能说明

  • 核心用途:根据指定坐标获取当前视图和目标视图,当前视图为包含坐标且可响应触摸的顶层视图,目标视图为包含坐标的顶层视图
  • 若视图组设置了拦截触摸事件标志(disallowIntercept),则 current 和 target 均置为 nullptr
  • 支持变换映射(TransformMap)下的坐标转换

入参

名称 参数类型 详细说明 约束取值范围
point const Point& 入参只读引用,指定坐标 -
current UIView** 出参指针,指向获取到的当前视图 不为 nullptr
target UIView** 出参指针,指向获取到的目标视图 不为 nullptr

出参

名称 数据类型 输出说明
current UIView** 出参指针,由被调用方写入当前视图指针或 nullptr
target UIView** 出参指针,由被调用方写入目标视图指针或 nullptr

MoveChildByOffset

virtual void MoveChildByOffset(int16_t x, int16_t y)

功能说明

  • 核心用途:按偏移量移动视图组中所有子视图的位置
  • 遍历子视图链表,将每个子视图的 x/y 坐标分别加上指定偏移量
  • 该函数为虚函数,子类可重写以实现自定义移动逻辑

入参

名称 参数类型 详细说明 约束取值范围
x int16_t x 轴偏移距离 INT16_MIN ~ INT16_MAX
y int16_t y 轴偏移距离 INT16_MIN ~ INT16_MAX

GetChildrenHead

UIView* GetChildrenHead() const

功能说明

  • 核心用途:获取视图组中第一个子视图
  • 返回子视图链表的头节点指针
  • 该函数为 const 成员函数,不修改对象状态

返回值

  • 返回类型:UIView*

返回第一个子视图指针

返回值 触发场景
非空指针 子视图链表非空
nullptr 子视图链表为空

GetChildrenTail

UIView* GetChildrenTail() const

功能说明

  • 核心用途:获取视图组中最后一个子视图
  • 返回子视图链表的尾节点指针
  • 该函数为 const 成员函数,不修改对象状态

返回值

  • 返回类型:UIView*

返回最后一个子视图指针

返回值 触发场景
非空指针 子视图链表非空
nullptr 子视图链表为空

GetChildrenRenderHead

UIView* GetChildrenRenderHead() const

功能说明

  • 核心用途:获取视图组中第一个渲染子视图
  • 渲染链表按 zIndex 排序,与子视图链表的添加顺序不同
  • 该函数为 const 成员函数,不修改对象状态

返回值

  • 返回类型:UIView*

返回第一个渲染子视图指针

返回值 触发场景
非空指针 渲染链表非空
nullptr 渲染链表为空

SetChildrenRenderHead

void SetChildrenRenderHead(UIView* renderHead)

功能说明

  • 核心用途:设置视图组的第一个渲染子视图
  • 待设置的视图必须为当前视图组的子视图,否则设置失败
  • 该接口用于手动调整渲染链表头部

入参

名称 参数类型 详细说明 约束取值范围
renderHead UIView* 入参指针,指定第一个渲染子视图 可为 nullptr;若非 nullptr 则须为当前视图组的子视图

SetDisallowIntercept

void SetDisallowIntercept(bool flag)

功能说明

  • 核心用途:设置视图组在触摸事件中是否被拦截
  • 设置为 true 时,视图组将拦截触摸事件,GetTargetView 返回 nullptr
  • 设置为 false 时,触摸事件正常传递到子视图

入参

名称 参数类型 详细说明 约束取值范围
flag bool 入参,是否拦截触摸事件 true:拦截;false:不拦截

GetChildById

virtual UIView* GetChildById(const char* id) const override

功能说明

  • 核心用途:根据 ID 查找目标子视图
  • 采用深度优先遍历方式在子视图树中查找匹配 ID 的子视图
  • 该函数为 const 成员函数,不修改对象状态

入参

名称 参数类型 详细说明 约束取值范围
id const char* 入参只读指针,目标子视图的 ID 字符串 不为 nullptr

返回值

  • 返回类型:UIView*

返回匹配 ID 的子视图

返回值 触发场景
非空指针 找到匹配 ID 的子视图
nullptr 未找到匹配 ID 的子视图

SetAutoSize

void SetAutoSize(bool state)

功能说明

  • 核心用途:设置视图组大小是否自适应所有子视图
  • 启用后,添加或插入子视图时视图组将自动调整大小以包含所有子视图
  • 禁用后,视图组大小需手动设置

入参

名称 参数类型 详细说明 约束取值范围
state bool 入参,是否启用自适应大小 true:启用;false:禁用

GetChildrenNumber

uint16_t GetChildrenNumber() const

功能说明

  • 核心用途:获取视图组中子视图的数量
  • 返回当前视图组中子视图链表的节点数
  • 该函数为 const 成员函数,不修改对象状态

返回值

  • 返回类型:uint16_t

返回子视图数量

返回值 触发场景
0 无子视图
1~65535 子视图数量

SetInterceptFocus

void SetInterceptFocus(bool interceptFocus)

功能说明

  • 核心用途:设置组件是否拦截焦点
  • 设置为 true 时,该视图组将拦截焦点
  • 该接口仅在 ENABLE_FOCUS_MANAGER 宏启用时可用

入参

名称 参数类型 详细说明 约束取值范围
interceptFocus bool 入参,是否拦截焦点 true:拦截焦点;false:不拦截焦点

Kconfig 配置

配置项 说明 默认值
ENABLE_FOCUS_MANAGER 启用焦点管理器 -

IsInterceptFocus

bool IsInterceptFocus() const

功能说明

  • 核心用途:获取组件是否拦截焦点
  • 返回当前焦点拦截标志的状态
  • 该接口仅在 ENABLE_FOCUS_MANAGER 宏启用时可用

返回值

  • 返回类型:bool

返回焦点拦截状态

返回值 触发场景
true 组件拦截焦点
false 组件不拦截焦点

Kconfig 配置

配置项 说明 默认值
ENABLE_FOCUS_MANAGER 启用焦点管理器 -

UpdateRenderView

void UpdateRenderView(UIView* targetView)

功能说明

  • 核心用途:更新渲染树,在子视图添加、移除或 zIndex 变更时调用
  • 根据 zIndex 值将目标视图插入到渲染链表的正确位置
  • 先从渲染链表中移除目标视图,再按 zIndex 顺序重新插入

入参

名称 参数类型 详细说明 约束取值范围
targetView UIView* 入参指针,被添加/移除或变更 zIndex 的视图 不为 nullptr