UIKit 容器类组件
容器类组件
容器类组件均继承于UIViewGroup,包含添加、删除、移动子节点等功能。布局类组件也属于容器类组件。
RootView
RootView类为单例模式,是UIKit组件视图树的根节点。
表 1 RootView核心函数
| 函数 | 介绍 |
|---|---|
| void SetOnKeyActListener(OnKeyActListener* onKeyActListener) | 设置物理按键事件上报时需调用的监听器。 |
| virtual void OnKeyEvent(const KeyEvent& event) | 回调物理按键事件监听器回调。 |
| void ClearOnKeyActListener() | 清除物理按键监听器。 |
| void SetOnVirtualDeviceEventListener(OnVirtualDeviceEventListener* onVirtualDeviceEventListener) | 设置监听器,用于监控虚拟设备的输入事件。 |
| void ClearOnVirtualDeviceEventListener() | 清除虚拟设备监听器。 |
| static bool FindSubView(const UIView& parentView, const UIView* subView); | 检查目标视图是否为指定父视图的子视图之一。 |
| void Invalidate() override | 刷新视图。 |
| void AddSystemView(UIView* view) | 系统层添加视图(主要用于消息、弹窗类视图,显示在最上层)。 |
| void RemoveSystemView(UIView* view) | 系统层删除视图。 |
OnKeyActListener,该监听器主要用来响应处理按键事件。
表 2 OnKeyActListener回调函数
| 函数 | 介绍 |
|---|---|
| virtual bool OnKeyAct(UIView& view, const KeyEvent& event) | 当触发按键事件时调用。 • 参数view:接受按键事件的视图。 • 参数event:按键事件。 返回值为bool类型: • 返回true表示事件已经处理。 • 返回false表示事件未处理完成,会将该事件继续传递到父视图。 |
GridLayout
GridLayout又称为网格布局,继承关系为GridLayout→Layout→UIViewGroup,对外开发接口如表1所示。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_view_percent/ui_test_view_percent.cpp”。
表 1 GridLayout核心函数
| 函数 | 介绍 |
|---|---|
| void SetRows(const uint16_t& rows) | 设置行数。 参数rows:行数。 |
| void SetCols(const uint16_t& cols) | 设置列数。 参数cols:列数。 |
| void LayoutChildren(bool needInvalidate = false) | 布局子组件。 参数needInvalidate:是否刷新。 |
FlexLayout
FlexLayout又称为弹性布局,继承关系为FlexLayout→Layout→UIViewGroup。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_view_percent/ui_test_view_percent.cpp”。
表 1 FlexLayout核心函数
| 函数 | 介绍 |
|---|---|
| void SetMajorAxisAlign(const AlignType& align) | 设置主方向上的布局方式。 参数align:开始、居中、结尾等 |
| void SetSecondaryAxisAlign(const AlignType& align) | 设置副方向上的布局方式。 参数align:开始、居中、结尾等。 |
| void SetFlexWrap(uint8_t wrap) | 设置是否支持换行NOWRAP(默认不换行)。 参数wrap:换行。 |
| void LayoutChildren(bool needInvalidate = false) | 布局子组件。 参数needInvalidate:是否刷新。 |
ListLayout
ListLayout又称为线性布局,继承关系为ListLayout→FlexLayout→Layout→UIViewGroup,和Android中的LinearLayout类似。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_ui_list_view/ui_test_list_layout.cpp”。
表 1 ListLayout核心函数
| 函数 | 介绍 |
|---|---|
| void SetDirection(uint8_t direction) | 设置布局方向。 参数direction:方向 • HORIZONTAL(横向) • VERTICAL(纵向) |
| uint8_t GetDirection() | 获取布局方向。 |
UIAbstractScroll
UIAbstractScroll是所有支持滑动的容器组件的父类。
表 1 UIAbstractScroll核心函数
| 函数 | 介绍 |
|---|---|
| void SetScrollBlankSize(uint16_t size) | 设置头结点或尾节点可滑动超出顶部或底部的距离。 |
| void SetMaxScrollDistance(uint16_t distance) | 设置单次滑动手势造成的滑动距离限制。 |
| uint16_t GetMaxScrollDistance() | 获取单次滑动手势造成的滑动距离限制。 |
| void SetDragFunc(EasingFunc func) | 设置拖动动效的函数。 |
| void SetThrowDrag(bool throwDrag) | 设置结束拖动时,是否产生惯性滑动动效。 |
| void SetReboundSize(uint16_t size) | 设置头结点或尾节点可滑动超出顶部或底部并回弹的距离,达到对应位置后,即可回弹至顶部或底部对齐的状态。 |
| void SetXScrollBarVisible(bool state) | 设置X轴滚动条是否可见。 |
| void SetYScrollBarVisible(bool state) | 设置Y轴滚动条是否可见。 |
| void SetScrollBarSide(uint8_t side) | 设置滚动条显示方位。参数参考枚举ScrollBarSide。 |
| void SetScrollBarCenter(const Point& center) | 获取滚动条中心点。 |
| void SetDirection(uint8_t direction) | 设置方向。 |
| uint8_t GetDirection() | 获取方向。 |
| void SetElastic(bool isElastic) | 设置弹簧效果。 |
| void SetElasticTime(uint16_t elasticTime) | 设置回弹时间(多长时间完成回弹)。 |
UIScrollView
UIScrollView是一个容器类组件。主要作用是在屏幕大小有限制时,在控件范围内移动内容,展示更多内容。
继承关系为UIScrollView→UIAbstractScroll→UIViewGroup。
UIScrollView内部定义了滚动监听器OnScrollListener,用来监听滚动状态。具流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_ui_scroll_view/ui_test_ui_scroll_view.cpp”。
表 1 UIScrollView核心函数
| 函数 | 介绍 |
|---|---|
| void SetVerticalScrollState(bool state) | 设置纵向是否可滚动。 |
| bool GetVerticalScrollState() const | 获取纵向是否可滚动。 |
| void SetHorizontalScrollState(bool state) | 设置横向是否可滚动。 |
| bool GetHorizontalScrollState() const | 获取横向是否可滚动。 |
| void ScrollBy(int16_t xDistance, int16_t yDistance) | 设置滚动距离。 注意:坐标系基准点是左上为(0,0),如果要向左下偏移,xDistance和yDistance应为负值。 • xDistance:X轴上偏移 • yDistance:Y轴上偏移 |
UISwipeView
UISwipeView类似于android中的ViewPage的Tab,继承于UIAbstractScroll,常用函数如表1所示。
具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_ui_swipe_view/ui_test_ui_swipe_view.cpp”。
表 1 UISwipeView核心函数
| 函数 | 介绍 |
|---|---|
| void SetDirection(uint8_t direction) | 设置拖动方向。 |
| void Add(UIView* view) override | 添加视图。 |
| void Insert(UIView prevView, UIView insertView) override | 向UISwipeView中的prevView后面插入视图。 |
| virtual void Remove(UIView* view) override | 移除视图。 |
| void SetCurrentPage(uint16_t index, bool needAnimator = false) | 设置当前选项卡的索引(注意:需要保证已添加子元素)。 |
| uint16_t GetCurrentPage() const | 获取当前选项卡的索引。 |
| void SetBlankSize(uint16_t size) | 设置空白大小,默认DEFAULT_BLANK_SIZE。 |
| bool OnDragEvent(const DragEvent& event) override | 拖动事件(内部回调,无需用户主动调用)。 |
| bool OnDragEndEvent(const DragEvent& event) override | 拖动事件结束(内部回调,无需用户主动调用)。 |
| void SetAlignMode(AlignMode alignMode = ALIGN_CENTER) | 设置UISwipeView子组件的对齐模式。 |
| void SetOnSwipeListener(OnSwipeListener* onSwipeListener) | 设置滑动事件上报时需调用的监听器。 |
| UIView* GetViewByIndex(uint16_t index) const | 获取当前View在UISwipeView中的位置。 |
| void SetLoopState(bool loop) | 设置子视图循环显示。 |
| void SetAnimatorTime(uint16_t time) | 设置页面动画的时间(ms)。 |
UISwipeViewNested
UISwipeViewNested继承于UISwipeView,用于解决滑动冲突。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_nested/ui_test_nested.cpp”。
表 1 UISwipeViewNested核心函数
函数 |
介绍 |
|---|---|
void SetBoundaryIntercept(uint8_t direction, bool isIntercept) |
设置当滑动超出边界时是否拦截滑动事件。 |
查询当滑动超出边界时是否拦截滑动事件。 |
UIList
UIList控件用于展示垂直或水平排列的列表项。支持绑定适配器、选择项位置对齐、事件响应等功能。主要适用于设置界面、菜单界面、文件列表、聊天记录等。
基类继承:UIAbstractScroll
参考示例:/src/ohos/foundation/arkui/ui_lite/test/uitest/test_ui_list/ui_test_ui_list.cpp
表 1 UIList核心函数
| 函数 | 介绍 |
|---|---|
| UIList() | 构造函数,默认创建垂直排列的列表。 |
| UIList(uint8_t direction) | 构造函数,选择创建垂直或者水平排列的列表。 |
| void SetDirection(uint8_t direction) | 设置列表排列方向。 |
| uint8_t GetDirection() const | 获取列表排列方向。 |
| void SetAdapter(AbstractAdapter* adapter) | 绑定列表的适配器,主要用于传递数据。sample中使用的是TextAdapter,还可以自定义适配器,继承于AbstractAdapter,实现类似于微信朋友圈效果。 注意,调用该接口前需要保证UIList内部没有残余控件。 |
| void SetStartIndex(uint16_t index) | 设置当前显示列表从第几项开始展示。该函数仅在SetAdapter前调用才能生效。 |
| void SetLoopState(bool state) | 设置列表是否循环展示。 |
| UIView* GetSelectView() | 获取当前选择的项。 |
| void RefreshList() | 刷新列表。 |
| void SetSelectPosition(uint16_t position) | 设置当前选择的项,可以在选择项上做放大效果操作。 注意:该值设置后,需要调用RefreshList刷新列表,GetSelectView()才会生效。 |
| void ScrollBy(int16_t distance) | 滚动列表。 注意:向上滚动应为负值。 |
| void ScrollTo(uint16_t index) | 滚动到第index条开始展示。 |
| bool OnDragEvent(const DragEvent& event) override | 处理拖动事件,并上报父类,不需要主动调用。 一般不重写,除非自定义组件。 |
| bool OnDragEndEvent(const DragEvent& event) override | 处理拖动事件,并上报父类,不需要主动调用。 一般不重写,除非自定义组件。 |
| bool OnPressEvent(const PressEvent& event) override | 处理按下事件,并上报父类,不需要主动调用。 一般不重写,除非自定义组件。 |
须知:
- UIList控件进度条已开启,默认设为圆屏(即弧形进度条),若用户使用的方屏,请在启动阶段将屏幕类型设置为方屏(即矩形进度条):BaseGfxEngine::GetInstance()->SetScreenShape(RECTANGLE);
- 只需开启scroll bar即可看到对应的效果:SetXScrollBarVisible(true);
- 推荐使用“UISimpleList”控件。
AbstractAdapter
AbstractAdapter虚类,列表适配器。主要用于指定列表中的列如何显示以及存储列的数据。
基类继承:HeapBase
参考示例:
/src/middleware/services/gui/uikit/ui/interfaces/kits/components/text_adapter.h
/src/middleware/services/gui/uikit/ui/frameworks/components/text_adapter.cpp
表 1 AbstractAdapter核心函数
函数 |
介绍 |
|---|---|
获取列表列数据的个数。 |
|
获取列表列的显示实例。 入参说明: inView:列的可复用控件实例,如果该参数为nullptr则没有可复用的实例对象。 index: 当前需要显示的列号。 |
|
删除视图对象 |
|
获取当前index列的宽。 |
|
获取当前index列的高。 |
说明: 推荐用户根据具体场景使用“UISimpleList”和“UISimpleTransformList”控件,不需要再关注对该类的继承实现。
UIListExt
UIListExt控件用于展示垂直或水平排列的列表项,列为UIMenuItem控件时,滑动过程中可支持列缩放。适用于圆屏的“单个图标 + 单个文本”的特殊列表场景。
基类继承:UIList
参考示例:“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_list_ext/ui_test_list_ext.cpp”
表 1 UIListExt核心函数
| 函数 | 介绍 |
|---|---|
| void SetScaleFactor(int16_t value) | 设置缩放因子。 |
| void SetItemSpace(uint16_t value) | 设置条目与条目之间的间隙。 |
说明: 推荐使用“UISimpleTransformList”组件。
UIMenuItem
UIMenuItem控件是一个“单个图标 + 单个文本”的特定列表适配器。支持设置图片和文本。
基类继承:UIViewGroup介绍
参考示例:/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_list_ext/menu_item_adapter.cpp
表 1 UIMenuItem核心函数
| 函数 | 介绍 |
|---|---|
| void SetImageSrc(const char* imgSrc) | 设置图片资源。 |
| void SetImageSrc(const ImageInfo* imgSrc) | 设置图片资源。 |
| void SetText(const char* text) | 设置文本。 |
| void SetAlign(UITextLanguageAlignment align) | 设置文字对齐。 |
| void SetDirect(UITextLanguageDirect direct) | 设置文字显示方向。 |
| void SetLabelStyle(Style& labelStyle) | 设置文字风格。 |
| void SetLabelStyle(uint8_t key, int64_t value) | 设置文字风格。 |
| void SetTextColor(ColorType color) | 设置文字颜色。 |
| void SetFont(const char* name, uint8_t size) | 设置字体属性。 |
| void SetFontId(uint16_t fontId) | 设置字体属性。 |
| void SetLineBreakMode(const uint8_t lineBreakMode) | 设置文本的显示模式。 |
| void SetTextId(uint16_t textId) | 设置文本多语言。 |
| void SetImgResizeMode(UIImageView::ImageResizeMode mode) | 设置图片填充模式。 |
| void SetImgOffset(int16_t offset) | 设置图片距离控件左边缘的偏移。 |
| void SetTextOffset(int16_t offset) | 设置文本距离图片右边缘的偏移。 |
| void SetScaleAlignMode(ScaleAlignMode mode) | 设置控件的缩放模式。 |
UIListNested
UIListNested用于解决滑动冲突。适用于嵌套使用列表与滚动场景,
基类继承:UIList
参考示例:“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_nested/ui_test_nested.cpp”
表 1 UIListNested核心函数
函数 |
介绍 |
|---|---|
void SetBoundaryIntercept(uint8_t direction, bool isIntercept) |
设置当滑动超出边界时是否拦截滑动事件。 |
查询当滑动超出边界时是否拦截滑动事件。 |
说明: 推荐使用“UISimpleList”控件。
UISimpleList
UISimpleList是“UIListNested”和AdapterWrapper类的组合。UISimpleList为实现列表中的列,可以显示不同的控件类型组合,例如,(UIImageView, UILabel, UIImageView)组合、(UIImageVIew, UILabel, UIToggleButton)组合都可以在一个列表内进行显示,效果如图1所示。并且该控件相比于普通的列表控件,用户不需要再关注对Adapter类的重写,只有需要关心每列属性,具体参考Contents类。列数据的增删改功能通过AdapterWrapper类设置给列表。
Contents类如下:
class Contents {
public:
CreateViewCallback createFunc; // 创建当前列控件组合。
UpdateViewCallback updateFunc; // 更新当前列控件属性。
uint8_t type; // 当前列的控件组合类型。List会将同类型的列进行内存复用。
void* data; // 当前列的数据。
};

表 1 AdapterWrapper核心函数
| 函数 | 介绍 |
|---|---|
| void AddContent(Contents& metadata) | 添加列的属性 • 入参metadata:在列表最后,添加一列属性。 |
| bool UpdateContent(int16_t index, Contents& metadata) | 更新指定列的属性 • 入参index:更新的列位置。 • 入参metadata:更新的列属性。 |
| void RemoveContent(int16_t index) | 删除指定列 • 入参index:删除的列位置。 |
| void ClearAll() | 清空所有列。 |
UITransformGroup
UITransformGroup容器支持整体变换。对容器设置的变换将应用到子控件上。支持子控件为UIImageView、UIImageAnimatorView、UILabel、UILabelExt、UICanvasExt、UISlider。
须知: 因为“UILabel”、“UILabelExt”控件不支持旋转变换,如果UITransformGroup添加了以上控件,请不要进行旋转变换。
表 1 UITransformGroup核心函数
| 函数 | 介绍 |
|---|---|
| void Add(UIView* view) override | 添加子控件。 |
| void Insert(UIView prevView, UIView insertView) | 插入子控件。 |
| void Remove(UIView* view) override | 移除子控件。 |
| void RemoveAll() override | 移除所有子控件。 |
| void TransformChild(UIView* view, TransformMap transmap) | 对内部特定子控件配置变换。内部计算时会根据实时位置调用SetTransMapRect。 |
| void SetAllStyle(uint8_t key, int64_t value) override | 对内部所有控件(一级子控件)和本身设置style。 |
UITransformList
UITransformList容器继承于“UIListNested”,使用时需要搭配列类型的Adapter。与UIList有所不同,该控件支持自定义设置在列表滑动时各列的变换状态。
具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_simple_list/ui_test_simple_transform_list.cpp”。
说明: “UISimpleTransformList”控件继承与UITransformList控件,UISimpleTransformList无需配置Adapter。所以推荐使用“UISimpleTransformList”控件。
表 1 UITransformList核心函数
| 函数 | 介绍 |
|---|---|
| void SetItemSpace(uint16_t value) | 设置条目与条目之间的间隙。 |
| using TransformFunc = bool()(UITransformList list, UIView* item) | 滑动时,回调函数类型。 |
| void SetItemTransformFunc(TransformFunc func) | 设置滑动时的回调函数,栏目将按照回调事件进行变换。 |
UISimpleTransformList
UISimpleTransformList是“UITransformList”和AdapterWrapper类的组合。UISimpleTransformList可以实现列的仿射变换。UISimpleTransformList与UISimpleList功能一致,但是相较于UISimpleList,UISImpleTransformList可以自定义滑动时列表列的变换。具体效果如图1所示。

UIAnalogClock
UIAnalogClock是显示时间的组件,继承关系为UIAnalogClock→UIAbstractClock→ViewGroup。按照时针、分针、秒针的表盘模式来展示。具体创建流程和使用方法请参考“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_ui_analog_clock/ui_test_analog_clock.cpp”。
表 1 UIAnalogClock核心函数
UISweepClock
UISweepClock是显示时间的组件,继承关系为UISweepClock→UIAbstractClock→ViewGroup。基本功能与UIAnalogClock相似,但可额外支持到毫秒级的精度。按照时针、分针、秒针以及每根指针对应的圆圈的表盘模式来展示。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_clock_dial/MainClockView.cpp”。

表 1 UISweepClock核心函数
-
表盘使用的指针图片请使用垂直指针图片如图2所示,方便后续位置计算。

-
以秒针为例,计算SetHandImage对应的center及position坐标:
秒针图片分辨率为50×315,假定使用454×454圆形屏幕,且表盘显示在正中间,如图1所示。
-
center选定为(25,211),center点位指的是在图片内的位置,与图片在屏幕上的位置无关,后续旋转也是以这个点为中心,大体位置如图3所示。

说明: center的y值以实际展示效果为准,可以进行上下调整,此处仅以sample为例给出参考。
-
position选定为(202,16),这个点代表图片在表盘中的位置,即图片左上角对应的位置。
这个点选取的原因如下:屏幕的中心点为(227,227),想要以屏幕中心点为各指针的旋转中心,则需要将center移到(227,227)位置,所以position值为(227,227)-(25,211)=(202,16)。
-
-
SetHandCircleImage的position值确定。
sample中,时、分、秒的circle image原图都是50×50的图片,图片的中心点为(25, 25),所以直接将此center移到屏幕正中心(227, 227)即可,所以position值为(227,227)-(25,25)=(202,202)。
说明: 上述sample指的是随SDK版本发的uikit sample中“Sweep Clock”这个测试用例。
代码位置:/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_clock_dial/MainClockView.cpp
UIDigitalClock
UIDigitalClock又称数字时钟,继承关系为UIDigitalClock→UIAbstractClock,常用函数参考如表1所示。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_digital_clock/ui_test_digital_clock.cpp”。

表 1 UIDigitalClock核心函数
| 函数 | 介绍 |
|---|---|
| void SetFont(const char* name, uint8_t size) | 设置此数字时钟的动态字体。 |
| void SetFontId(uint8_t fontId) | 设置此数字时钟的动态字体ID。 |
| void SetColor(ColorType color) | 设置展示时间的字体颜色。 |
| void SetDisplayMode(DisplayMode dm) | 设置此数字时钟的显示模式。 参数DisplayMode有四个枚举: • DISPLAY_12_HOUR_NO_SECONDS:12小时制,不展示秒。 • DISPLAY_24_HOUR_NO_SECONDS:24小时制,不展示秒。 • DISPLAY_12_HOUR:12小时制。 • DISPLAY_24_HOUR:24小时制。 |
| DisplayMode GetDisplayMode() const | 获取此数字时钟的显示模式。 |
| void DisplayLeadingZero(bool displayLeadingZero) | 设置是否在此数字时钟的小时之前添加‘0’。 |
| void SetOpacity(uint8_t opacity) | 设置此数字时钟的不透明度。 |
UIPicker
UIPicker是滑动选择器,主要使用场景是选择Item,常用函数介绍如表1所示。
具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_picker/ui_test_ui_picker.cpp”。
表 1 UIPicker核心函数
| 函数 | 介绍 |
|---|---|
| virtual bool SetValues(const char* value[], uint16_t count) | 使用字符串数组在选取器中设置动态文本数据。 |
| virtual bool SetValues(int16_t start, int16_t end) | 使用给定的数字范围设置选取器中的数字数据。 |
| virtual void ClearValues() | 清除选取器中的所有值。 |
| void SetFontId(uint8_t backgroundFontId, uint8_t highlightFontId) | 设置动态文本的字体ID。 |
| void SetBackgroundFont(const char* name, uint8_t size) | 设置背景文本的字体名称和大小。 |
| void SetHighlightFont(const char* name, uint8_t size) | 设置高亮显示文本的字体名称和大小。 |
| void SetTextColor(ColorType backgroundColor, ColorType highlightColor) | 设置文本颜色。 |
| bool SetSelected(uint16_t index) | 设置当前选定项目的索引。 |
| void SetItemHeight(int16_t height) | 设置每个项目的高度。 |
| void SetWidth(int16_t width) override | 设置当前组件的宽度。 |
| void SetHeight(int16_t height) override | 设置当前组件的高度。 |
| void SetLoopState(bool state) | 设置当前组件是否可以循环滑动。 |
| void RegisterSelectedListener(SelectedListener* pickerListener) | 为选定事件注册侦听器。 |
| void SetDirect(UITextLanguageDirect direct) | 设置文本方向。 |
| void SetTextFormatter(TextFormatter* formatter) | 设置文本格式器。 |
| uint16_t GetSelected() | 获取当前选中值的下标。 |
UITimePicker
UITimePicker又称作时间选择器,主要用于时间选择,常用函数介绍如表1所示。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_picker/ui_test_ui_picker.cpp”。
表 1 UITimePicker核心函数
| 函数 | 介绍 |
|---|---|
| bool SetSelected(const char* value) | 设置UITimePicker中当前选定的时间。 |
| const char* GetSelectValue() | 获取UITimePicker中当前选择的时间。 |
| const char* GetSelectHour() const | 获取UITimePicker中当前选定的小时。 |
| const char* GetSelectMinute() const | 获取UITimePicker中当前选定的分钟。 |
| const char* GetSelectSecond() const | 获取UITimePicker中当前选定的秒钟。 |
| void SetItemHeight(int16_t height) | 设置每一项Item的高度。 |
| void EnableSecond(bool state) | 设置是否在时间选择器中启用秒。 |
| void SetTextStyle(uint16_t backgroundFontId, uint16_t highlightFontId, ColorType backgroundColor, ColorType highlightColor) | 设置时间选择器中的文本格式,包括字体ID和颜色。 |
| void SetTextColor(ColorType backgroundColor, ColorType highlightColor) | 设置时间选择器中的文本颜色。 |
| void SetBackgroundFont(const char* name, uint8_t size) | 设置背景文本的字体名称和大小。 |
| void SetHighlightFont(const char* name, uint8_t size) | 设置高亮显示文本的字体名称和大小。 |
| void RegisterSelectedListener(SelectedListener* timePickerListener) | 为选定事件注册监听器。 |
UIAxis
UIAxis是用来表示坐标轴的组件。该组件继承于UIViewGroup,常以子类UIXAxis和UIYAxis来展示坐标轴。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_chart/ui_test_chart_pillar.cpp”。
表 1 UIAxis核心函数
| 函数 | 介绍 |
|---|---|
| virtual bool SetDataRange(uint16_t min, uint16_t max) = 0 | 设置坐标轴的取值范围。 |
| virtual void SetMarkNum(uint16_t count) = 0 | 设置坐标轴上的刻度数。 |
| void SetLineColor(const ColorType& color) | 设置线条颜色。 |
表 2 UIXAxis核心函数
函数 |
介绍 |
|---|---|
将数据转换为像素的X坐标。 |
|
设置X轴的取值范围。 |
|
设置X轴上的刻度数。 |
表 3 UIYAxis核心函数
| 函数 | 介绍 |
|---|---|
| void TranslateToPixel(int16_t& value) override | 将数据转换为像素的Y坐标。 |
| bool SetDataRange(uint16_t min, uint16_t max) override | 设置Y轴的取值范围。 |
| void SetMarkNum(uint16_t count) override | 设置Y轴上的刻度数。 |
| void SetAxisAlign(AxisAlign axisAlign) | 设置Y轴位置:左边或者右边。 |
UIChart
UIChart是图表类,提供添加、删除数据集等功能,以显示图表。常以子类UIChartPolyline(线条形)和UIChartPillar(柱状图)形式提供。具体使用流程请参考示例“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_chart/ui_test_chart_polyline.cpp”和“/src/ohos/foundation/arkui/ui_lite/test/uitest/test_chart/ui_test_chart_pillar.cpp”。
表 1 UIChart核心函数
| 函数 | 介绍 |
|---|---|
| void SetHeight(int16_t height) override | 设置当前组件的高度。 |
| void SetWidth(int16_t width) override | 设置当前组件的宽度。 |
| virtual bool AddDataSerial(UIChartDataSerial* dataSerial) | 添加数据集。 |
| virtual bool DeleteDataSerial(UIChartDataSerial* dataSerial) | 删除数据集。 |
| virtual void ClearDataSerial() | 清理所有数据。 |
| virtual void RefreshChart() = 0 | 刷新图表并重新绘制脏区域。 |
| UIXAxis& GetXAxis() | 获取X轴实例。 |
| UIYAxis& GetYAxis() | 获取Y轴实例。 |
| void EnableReverse(bool enable) | 启用图表反转。 |

表 2 UIChartPillar核心函数
| 函数 | 介绍 |
|---|---|
| void RefreshChart() override | 刷新柱状图并重新绘制脏区域。 |
| bool SetGradient(const LinearGradient& linear, const ColorStop* stops, uint16_t stopCount) | 设置chart线性梯度渐变。 |

表 3 UIChartPolyline核心函数
| 函数 | 介绍 |
|---|---|
| void RefreshChart() override | 刷新折线图并重新绘制脏区域。 |
| void SetGradientOpacity(uint8_t minOpa, uint8_t maxOpa) | 设置填充颜色渐变的不透明度范围。 |
| void SetGradientBottom(uint16_t bottom) | 设置填充颜色范围的底边与x轴之间的距离。 |
UICrossView
UICrossView是用于管理主界面的卡片的容器组件,该组件支持的功能如下:
- 支持卡片添加、插入、删除。水平添加卡片数无限制,上下卡片各只支持一个。
- 支持上下卡片的局部和全局模糊。
- 支持监听滑动开始、滑动结束、覆盖开始、覆盖结束事件。
- 支持资源的预加载与卸载,可预加载当前显示卡片的上下左右页面。
- 支持卡片切换动效配置。目前GUI提供缩放、翻转、翻页动效,其他动效用户可以自定义。
- 水平方向至少需要插入一个页面,如果需要在某个界面支持上下拉,需要将这个页面的coverable设置为true(参考UICardPage)。
具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_clock_dial/ui_test_clock_dial.cpp”。
表 1 UICrossView核心函数
表 2 UICardPage核心函数
| 函数 | 介绍 |
|---|---|
| virtual void PreLoad(void) | 卡片资源加载回调函数:在水平方向卡片切换(SetHorCurrentPage)或者滑动结束时,如果当前卡片未加载并且位于屏幕中间或者紧邻的左/右任一位置时,则会调用该函数。 |
| virtual void UnLoad(void) | 卡片资源卸载回调函数:在水平方向卡片切换(SetHorCurrentPage)或者滑动结束时,如果当前卡片已加载并且远离屏幕(不在屏幕中间以及紧邻左右位置)时,则会调用该函数。 |
| virtual void ScrollBegin(bool isActive) | 卡片滑动开始回调函数:在水平滑动开始时,当前水平方向显示的卡片以及左右相邻卡片将调用该函数。向上滑动时,下界面调用该函数;向下滑动时,上界面调用该函数。 isActive参数:无论是水平滑动,还是垂直滑动,滑动开始显示的卡片为true,其它调用该函数的卡片为false。 |
| virtual void ScrollEnd(bool isActive) | 卡片滑动结束回调函数:在水平/垂直滑动动画结束时,滑动开始时已经调用了ScrollBegin函数的卡片,都会接收到结束事件。 isActive参数:滑动结束时当前显示的卡片为true,其他为false。 |
| virtual void CoverBegin(bool isCovered) | 卡片覆盖开始回调函数:在垂直滑动开始时,水平方向当前显示的卡片调用该函数。 isCovered参数:水平卡片被覆盖时为true,否则为false。 |
| virtual void CoverEnd(bool isCovered) | 卡片覆盖结束回调函数:在垂直滑动动画结束时,水平方向当前显示的水平卡片调用该函数。 isCovered参数:水平界面被覆盖时为true,否则为false。 |
| virtual void OnActive(void) | 水平方向卡片切换(SetHorCurrentPage)回调函数:当水平方向卡片切换后,当前显示的卡片调用该函数。 Slice状态变化回调函数:当Slice切换到Resume状态时,水平方向显示的卡片调用该函数。 |
| virtual void OnPause(void) | Slice状态变化回调函数:当Slice切换到Pause状态时,水平方向显示的卡片调用该函数。 |
| virtual void OnInactive(void) | 水平方向卡片切换(SetHorCurrentPage)回调函数:当水平方向显示卡片切换后,切换前显示的卡片调用该函数。 |
| virtual void OnCovered(void) | 垂直方向卡片切换(SetVerCurrentPage)回调函数:在垂直方向卡片切换结束后,水平方向显示的卡片由被覆盖切换到可见状态时,调用该函数。 |
| virtual void OnUncovered(void) | 垂直方向卡片切换(SetVerCurrentPage)回调函数:在垂直方向卡片切换结束后,水平方向显示的卡片由可见切换到被覆盖状态时,调用该函数。 |
| void SetCoverable(bool coverable) | 设置当前水平卡片是否能被垂直卡片覆盖。 |
| bool IsCoverable(void) | 获取当前卡片覆盖状态。 |
| UIViewType GetViewType() | 获取控件类型。 |
表 3 CardSwipe核心函数
| 函数 | 介绍 |
|---|---|
| virtual void CardSwipeAlg(UICardPage leftCard, UICardPage rightCard, int16_t xOffset) | 拖动卡片时的滑动算法,输入为UICardPage类型。 |
| virtual void CardSwipeAlg(UIImageView leftCard, UIImageView rightCard, int16_t xOffset) | 拖动卡片时的滑动算法,输入为UIImageView类型。 |
UIRollerView
UIRollerView将图片按照滚筒的形式排布并支持滚动交互,目前仅支持水平方向。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_roller_view/ui_test_roller_view.cpp”。

表 1 UIRollerView核心函数
UICoverflowView
UICoverflowView用于添加图片,使图片之间存在覆盖流效果。仅支持水平方向,效果如图1所示。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_coverflow/ui_test_coverflow.cpp”。

表 1 UICoverflowView核心函数
| 函数 | 介绍 |
|---|---|
| void Add(const char id, const ImageInfo src); | 添加图片资源,以及对应的ID值。 |
| void Remove(const char* id); | 移除对应ID的图片。 |
| void SetImgSize(uint16_t width, uint16_t height); | 设置图片的大小。 |
| void SetImgPadding(uint16_t padding); | 设置图片之间的间距。(需要在添加子控件前设置) |
| void SetRotateAngle(float angle); | 设置左右图片的最大旋转角度。 |
| void SetOnCoverflowListener(OnCoverflowScrollListener* onCoverflowListener) | 设置滑动监听器,监听该控件的滑动事件,实现自定义的滑动处理。 |
说明: 建议使用UICoverflowView2控件,具体请参见“UICoverflowView2”。UICoverflowView2能够覆盖UICoverflowView功能,而且适用于更多的UI场景。
UICoverflowView2
适用于UICoverflowView子控件的内容为多种图片场景,示例如图1所示。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_coverflow/ui_test_coverflow2.cpp”。

表 1 UICoverflowView2核心函数
| 函数 | 介绍 |
|---|---|
| void Add(UIView* view); | 添加一个UITransformGroup类型的子控件。 |
| void Insert(UIView prevView, UIView insertView) | 插入一个UITransformGroup类型的子控件。 |
| void Remove(UIView* view); | 删除一个已添加的子控件。 |
| void SetPagePadding(uint16_t padding) | 设置每项之间的间距。(需要在添加子控件前设置) |
| void SetChildMaxRotateAngle(float angle) | 设置项的最大旋转角度。 |
| void SetOnCoverflowListener(OnCoverflowScrollListener* onCoverflowListener) | 设置滑动监听器,监听该控件的滑动事件,实现自定义的滑动处理。 |
须知: 不要添加UILabel UILabelExt到UITransformGroup类型的子控件中,会导致位置显示异常。
UISphereView
该控件可以实现2.5D球形菜单界面,显示效果如图1所示。
具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_sphere_view/ui_test_sphere_view.cpp”。

表 1 UISphereView核心参数
| 函数 | 介绍 |
|---|---|
| UISphereView(uint8_t numberOfRow); | 构造函数,需要输入球形的一行最多显示数量,超过则换行。 |
| void Add(UIView* view) override; | 添加子控件,只支持UITransformGroup类型控件。 |
| void Insert(UIView prevView, UIView insertView) override; | 插入子控件,只支持UITransformGroup类型控件。 |
| void Remove(UIView* view) override; | 删除子控件,需要输入add或者insert的控件对象。 |
| void SetNumberOfRow(uint8_t numberOfRow); | 设置球形每行最多显示控件数。 |
| uint8_t GetNumberOfRow(); | 获取当前球形每行的数量。 |
| void UpdateItemAngle(float angle); | 从当前位置旋转设置的角度。 |
| void SetSensitivityFactor(float sensitivity); | 设置球形灵敏度。 |
| float GetSensitivityFactor(); | 获取球形灵敏度。 |
须知: 球形控件的宽高需要设置一致。
以下是球型菜单控件的示例代码:
UISphereView sphereView = new UISphereView(8); // 创建一个每行显示8个控件的球形菜单
sphereView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); // 设置球形菜单大小为屏幕大小
sphereView->SetThrowDrag(true);
sphereView->RequestFocus(); // 申请焦点,支持表冠滚动。
for (uint8_t i = 0; i < 24; i++) { // 添加24的子控件到球形菜单
UITransformGroup* group = new UITransformGroup(); // 创建UITransformGroup控件。
group->SetPosition(0, 0, 60, 60);
group->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
UIImageView* image = new UIImageView(); // 创建需要显示的图片控件。
image->SetPosition(0, 0, 60, 60);
image->SetAutoEnable(false);
image->SetResizeMode(UIImageView::ImageResizeMode::FILL);
ImageInfo* info = ImageCacheManager::GetInstance().LoadSingleRes("[图片资源路径]");
image->SetSrc(info);
group->Add(image);
sphereView->Add(group);
}
UISlipflowView
具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_slipflow/ui_test_slipflow.cpp”。

表 1 UISlipflowView核心函数
| 函数 | 介绍 |
|---|---|
| void Add(UIView* view); | 添加子控件。 |
| void Remove(UIView* view); | 删除子控件。 |
| void SetCurrentPage(uint16_t index, bool needAnimator); | 设置当前页。 |
| void SetAnimatorTime(uint16_t time); | 设置页面切换的动画时间。 |
| void SetMoveCoefficient(uint16_t coefficient); | 设置当前页面及右侧页面相对于其他页面的移动系数,及当前页面及右侧页面的移动速度是其他页的coefficient倍。 |
| void SetOnSlipflowListener(OnSlipflowScrollListener* onSlipflowListener) | 设置滑动监听器,监听该控件的滑动事件,实现自定义的滑动处理。 |
UIIcosahedronView
UIIcosahedronView二十面体容器控件,可以实现足球效果,效果如图1所示。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_icosahedron/ui_test_icosahedron.cpp”。

该控件实际是一个由20个三角面(三个顶点)组成的容器控件,每个六边形都按照特定方向在三角内,所以如果需要实现足球效果,对传入的各个面的图片资源存在限制。每个面图片需要是背景透明的正六边的图片,如图2所示,方向也需要特别注意,要与实例一致。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_icosahedron/ui_test_icosahedron.cpp”。

表 1 UIIcosahedronView核心函数
| 函数 | 介绍 |
|---|---|
| void SetSideLength(uint16_t sideLen); | 设置二十面体的棱长,通过该接口可以控制球体的大小。 |
| void Add(UIView* view) override; | 添加UIViewImage控件。 |
| void RefreshIcosahedron(); | 刷新二十面体容器,在更新棱长或旋转的角度后使用。 |
| bool RotatePlanes(int16_t angle, const Vector3 |
旋转二十面体容器。 |
| void SetDefaultImage(ImageInfo* src) | 设置默认图片。在添加子控件不满二十面体时,使用该图片进行显示。 |
| void SetLuminanceFactor(float value) | 设置惯性的补偿系数。系数越大,惯性越大。 |
UIHexagonList
UIHexagonList是呈蜂窝状排布子节点的容器控件,常用于陈列菜单界面的各应用图标。该控件仅支持添加UIImageView和UITransformGroup。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_hexagons_list/ui_test_hexagons_list.cpp”。
表 1 UIHexagonList核心函数
UICustomHexagonsList
UICustomHexagonList继承自UIHexagonList,额外支持表冠响应,可通过SetOnRotateListener实现表冠转动监听。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_hexagons_list/ui_test_hexagons_list.cpp”。
表 1 UICustomHexagonList核心函数
函数 |
介绍 |
|---|---|
以索引值为center的控件为中心,启动一段动画完成指定距离偏移和指定倍数缩放。 |
|
停止动画。 |
UIWaterfallList
UIWaterfallList是以每行3列或4列交叉排布子控件的容器控件,常用于陈列菜单界面的各应用图标。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_waterfall_list/ui_test_waterfall_list.cpp”。
表 1 UIWaterfallList核心函数
UIParticleView
UIParticleView是用于生成粒子效果的容器控件。UIParticleView通过ParticleCell来定义一组粒子的样式和行为,同时也提供适用于所有粒子的全局属性配置。通过调整属性,可以创造丰富多样的粒子效果。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_particle/ui_test_particle.cpp”。

表 1 UIParticleView核心函数
| 函数 | 介绍 |
|---|---|
| UIParticleView() | 粒子容器控件构造函数。粒子动画将不间断运行。具体是否有内容显示取决于ParticelCell的配置。 |
| UIParticleView(uint32_t time, bool repeat) | 粒子容器控件构造函数。可指定粒子动画运行时长(ms)以及是否重复运行。 |
| virtual ~UIParticleView() override | 粒子容器控件析构函数。停止粒子动画,并销毁所有ParticleCell及粒子。 |
| ParticleCell* CreateParticleCell() | 创建并返回ParticleCell。ParticleCell用于定义一组粒子的样式和行为。 |
| void SetBirthRateRatio(float ratio) | 设置粒子生产率系数,将与ParticleCell定义的粒子生产率相乘,默认值为1.0。 |
| void SetLifetimeRatio(float ratio) | 设置粒子生命周期系数,将与ParticleCell定义的粒子生命周期相乘,默认值为1.0。 |
| void SetScaleRatio(float ratio) | 设置粒子缩放系数,将与ParticleCell定义的粒子缩放倍数相乘,默认值为1.0。 |
| void SetVelocityRatio(float ratio) | 设置粒子速度系数,将与ParticleCell定义的粒子速度相乘,默认值为1.0。 |
| float GetBirthRateRatio() | 获取粒子生产率系数。 |
| float GetLifetimeRatio() | 获取粒子生命周期系数。 |
| float GetScaleRatio() | 获取粒子缩放系数。 |
| float GetVelocityRatio() | 获取粒子速度系数。 |
| void SetTime(uint32_t time) | 设置粒子动画运行周期。 |
| uint32_t GetTime() | 获取粒子动画运行周期。 |
| bool IsRepeat() | 获取粒子动画是否重复运行。 |
| void Start() | 启动粒子动画。 |
| void Pause() | 暂停粒子动画。 |
| void Resume() | 继续粒子动画。 |
| void Stop() | 停止粒子动画。将销毁所有ParticleCell及粒子。 |
| uint8_t GetState() | 获取粒子动画状态。 |
| void ClearParticles() | 销毁所有ParticleCell及粒子。 |
表 2 ParticleCell核心函数
UIMapView
UIMapView为定制化的地图显示控件,该控件只针对私有数据进行显示,私有数据格式如图1所示。具体使用流程请参考示例“/src/middleware/services/gui/uikit/sample/uitest/components/ui_test_map/ui_test_map.cpp”。

地图显示效果如图2所示。

表 1 UIMapView核心函数
| 函数 | 描述 |
|---|---|
| bool SetSVG(const char* path); | 使用文件路径设置SVG。 |
| bool SetSVG(uint8_t* data, uint32_t length); | 使用文件缓冲区设置SVG。 |
| void SetOnPOIClickListener(OnPOIClickListener* listener); | 设置POI的监听器。 |
| void EnableCache(bool enable); | 启用缓存。当enable为true时,它将立即缓存这个图块,并立即释放缓存。我们需要在设置SVG的时候开启缓存,或者在缩放地图完成之后开启缓存,在缩放地图之前关闭缓存。 |
| void ScaleMap(float scale, const Vector2 |
用于以目标点为基准缩放地图。 |
| void HidePOI(uint16_t tag, bool isHide = true); | 通过标签隐藏POI。 |
UIPlanetList
UIPlanetList是一个容器控件,其核心布局是一个3×3的网格结构,除此之外,还可以在上下左右四个方向各额外显示最多3个组件。这个控件常用于菜单界面中,用来展示应用程序的图标。该控件支持通过旋转表冠进行缩放操作,当放大至极限时,每个组件的标题将被显示。

表 1 UIPlanetList核心函数
| 函数 | 描述 |
|---|---|
| AddItemVIew(UIView* view) | 添加一个子控件。 |
| AddLabel(UIView* view) | 添加一个子控件对应的标题。 |
| MoveChildTo(int16_t posX, int16_t posY); | 移动所有子控件到指定的位置。 |
| MoveChildByOffset(int16_t offsetX, int16_t offsetY) | 按照偏移量移动所有子控件。 |
| GetViewType() | 获取控件的类型。 |
| SetImageDistance(uint16_t distance) | 设置子控件的间隔。 |
| GetImageDistance() | 获取子控件的间隔。 |
| SetImageSize(uint16_t size) | 设置子控件的大小。 |
| GetImageSize() | 获取子控件的大小。 |
| SetLastOffset(int16_t x, int16_t y) | 设置子控件的初始偏移量。 |
| GetLastOffset(int16_t& x, int16_t& y) | 获取子控件的初始偏移量。 |