qidao123.com技术社区-IT企服评测·应用市场
标题:
【鸿蒙next开辟】ArkUI框架:ArkTS组件-FoldSplitContainer
[打印本页]
作者:
道家人
时间:
前天 20:50
标题:
【鸿蒙next开辟】ArkUI框架:ArkTS组件-FoldSplitContainer
往期鸿蒙5.0全套实战文章必看:(文中附带鸿蒙5.0全栈学习资料)
鸿蒙开辟核心知识点,看这篇文章就够了
最新版!鸿蒙HarmonyOS Next应用开辟实战学习门路
鸿蒙HarmonyOS NEXT开辟技术最全学习门路指南
鸿蒙应用开辟实战项目,看这一篇文章就够了(部分项目附源码)
FoldSplitContainer
FoldSplitContainer分栏结构,实现折叠屏二分栏、三分栏在展开态、悬停态以及折叠态的地区控制。
说明
该组件从API Version 12开始支持。后续版本如有新增内容,则接纳上角标单独标记该内容的起始版本。
子组件
无
FoldSplitContainer
FoldSplitContainer({
primary: Callback<void>,
secondary: Callback<void>,
extra?: Callback<void>,
expandedLayoutOptions: ExpandedRegionLayoutOptions,
hoverModeLayoutOptions: HoverModeRegionLayoutOptions,
foldedLayoutOptions: FoldedRegionLayoutOptions,
animationOptions?: AnimateParam,
onHoverStatusChange?: OnHoverStatusChangeHandler
})
装饰器范例:
@Component
元服务API:
从API version 12开始,该接口支持在元服务中利用。
系统本领:
SystemCapability.ArkUI.ArkUI.Full
参数:
名称参数范例必填装饰器范例说明primary()=>void是@BuilderParam重要地区回调函数。secondary()=>void是@BuilderParam次要地区回调函数。extra()=>void否@BuilderParam扩展地区回调函数,不传入的环境,没有对应地区。expandedLayoutOptionsExpandedRegionLayoutOptions是@Prop展开态结构信息。hoverModeLayoutOptionsHoverModeRegionLayoutOptions是@Prop悬停态结构信息。foldedLayoutOptionsFoldedRegionLayoutOptions是@Prop折叠态结构信息。animationOptionsAnimateParam | null否@Prop设置动画效果相关的参数,null表现表现关闭动效。onHoverStatusChangeOnHoverStatusChangeHandler否-折叠屏进入或退出悬停模式时触发的回调函数。
ExpandedRegionLayoutOptions
装饰器范例:
@Prop
元服务API:
从API version 12开始,该接口支持在元服务中利用。
系统本领:
SystemCapability.ArkUI.ArkUI.Full
展开态结构信息。
名称范例必填说明isExtraRegionPerpendicularboolean否扩展地区是否从上到下贯穿整个组件,当且仅当extra有效时此字段才生效。默认值:true。verticalSplitRationumber否重要地区与次要地区之间的高度比例。默认值:PresetSplitRatio.LAYOUT_1V1。horizontalSplitRationumber否重要地区与扩展地区之间的宽度比例,当且仅当extra有效时此字段才生效。默认值:PresetSplitRatio.LAYOUT_3V2。extraRegionPositionExtraRegionPosition否扩展地区的位置信息,当且仅当isExtraRegionPerpendicular = false有效时此字段才生效。默认值:ExtraRegionPosition.top。
HoverModeRegionLayoutOptions
装饰器范例:
@Prop
元服务API:
从API version 12开始,该接口支持在元服务中利用。
系统本领:
SystemCapability.ArkUI.ArkUI.Full
悬停态结构信息。
名称范例必填说明showExtraRegionboolean否可折叠屏幕在半折叠状态下是否显示扩展地区。默认值:false。horizontalSplitRationumber否重要地区与扩展地区之间的宽度比例,当且仅当extra有效时此字段才生效。默认值:PresetSplitRatio.LAYOUT_3V2。extraRegionPositionExtraRegionPosition否扩展地区的位置信息,当且仅当showExtraRegion时此字段才生效。默认值:ExtraRegionPosition.top。 说明
1.装备处于悬停态时,存在避让地区,结构计算需要考虑避让地区对结构的影响。
2.在悬停模式下,屏幕上半部分用于显示,下半部分用于操作。
FoldedRegionLayoutOptions
装饰器范例:
@Prop
元服务API:
从API version 12开始,该接口支持在元服务中利用。
系统本领:
SystemCapability.ArkUI.ArkUI.Full
折叠态结构信息。
名称范例必填说明verticalSplitRationumber是重要地区与次要地区之间的高度比例。默认值:PresetSplitRatio.LAYOUT_1V1。
OnHoverStatusChangeHandler
元服务API:
从API version 12开始,该接口支持在元服务中利用。
onHoverStatusChange事故处理。
名称范例必填说明callback(status: HoverModeStatus) => void是折叠屏进入或退出悬停模式时触发的回调函数。
HoverModeStatus
元服务API:
从API version 12开始,该接口支持在元服务中利用。
系统本领:
SystemCapability.ArkUI.ArkUI.Full
折叠态结构信息。
名称范例必填说明foldStatusFoldStatus10+是装备的折叠状态。isHoverModeboolean是app当前是否处于悬停态。appRotationnumber是应用旋转角度。windowStatusTypeWindowStatusType11+是窗口模式。
ExtraRegionPosition
元服务API:
从API version 12开始,该接口支持在元服务中利用。
扩展地区位置信息。
名称值描述top1扩展地区在组件上半地区。bottom2扩展地区在组件下半地区。
PresetSplitRatio
元服务API:
从API version 12开始,该接口支持在元服务中利用。
地区比例。
名称值描述LAYOUT_1V111:1比例。LAYOUT_3V21.53:2比例。LAYOUT_2V30.66666666666666662:3比例。
示例
示例1(设置二分栏)
该示例实现了折叠屏二分栏在展开态、悬停态以及折叠态的地区控制。
import { FoldSplitContainer } from '@kit.ArkUI';
@Entry
@Component
struct TwoColumns {
@Builder
privateRegion() {
Text("Primary")
.backgroundColor('rgba(255, 0, 0, 0.1)')
.fontSize(28)
.textAlign(TextAlign.Center)
.height('100%')
.width('100%')
}
@Builder
secondaryRegion() {
Text("Secondary")
.backgroundColor('rgba(0, 255, 0, 0.1)')
.fontSize(28)
.textAlign(TextAlign.Center)
.height('100%')
.width('100%')
}
build() {
RelativeContainer() {
FoldSplitContainer({
primary: () => {
this.privateRegion()
},
secondary: () => {
this.secondaryRegion()
}
})
}
.height('100%')
.width('100%')
}
}
复制代码
折叠态展开态悬停态
示例2(设置三分栏)
该示例实现了折叠屏三分栏在展开态、悬停态以及折叠态的地区控制。
import { FoldSplitContainer } from '@kit.ArkUI';
@Entry
@Component
struct ThreeColumns {
@Builder
privateRegion() {
Text("Primary")
.backgroundColor('rgba(255, 0, 0, 0.1)')
.fontSize(28)
.textAlign(TextAlign.Center)
.height('100%')
.width('100%')
}
@Builder
secondaryRegion() {
Text("Secondary")
.backgroundColor('rgba(0, 255, 0, 0.1)')
.fontSize(28)
.textAlign(TextAlign.Center)
.height('100%')
.width('100%')
}
@Builder
extraRegion() {
Text("Extra")
.backgroundColor('rgba(0, 0, 255, 0.1)')
.fontSize(28)
.textAlign(TextAlign.Center)
.height('100%')
.width('100%')
}
build() {
RelativeContainer() {
FoldSplitContainer({
primary: () => {
this.privateRegion()
},
secondary: () => {
this.secondaryRegion()
},
extra: () => {
this.extraRegion()
}
})
}
.height('100%')
.width('100%')
}
}
复制代码
折叠态展开态悬停态
示例3(展开态结构信息)
该示例通过设置ExpandedRegionLayoutOptions实现折叠屏展开态的结构信息。
import {
FoldSplitContainer,
PresetSplitRatio,
ExtraRegionPosition,
ExpandedRegionLayoutOptions,
HoverModeRegionLayoutOptions,
FoldedRegionLayoutOptions
} from '@kit.ArkUI';
@Component
struct Region {
@Prop title: string;
@BuilderParam content: () => void;
@Prop compBackgroundColor: string;
build() {
Column({ space: 8 }) {
Text(this.title)
.fontSize("24fp")
.fontWeight(600)
Scroll() {
this.content()
}
.layoutWeight(1)
.width("100%")
}
.backgroundColor(this.compBackgroundColor)
.width("100%")
.height("100%")
.padding(12)
}
}
const noop = () => {
};
@Component
struct SwitchOption {
@Prop label: string = ""
@Prop value: boolean = false
public onChange: (checked: boolean) => void = noop;
build() {
Row() {
Text(this.label)
Blank()
Toggle({ type: ToggleType.Switch, isOn: this.value })
.onChange((isOn) => {
this.onChange(isOn);
})
}
.backgroundColor(Color.White)
.borderRadius(8)
.padding(8)
.width("100%")
}
}
interface RadioOptions {
label: string;
value: Object | undefined | null;
onChecked: () => void;
}
@Component
struct RadioOption {
@Prop label: string;
@Prop value: Object | undefined | null;
@Prop options: Array<RadioOptions>;
build() {
Row() {
Text(this.label)
Blank()
Column({ space: 4 }) {
ForEach(this.options, (option: RadioOptions) => {
Row() {
Radio({
group: this.label,
value: JSON.stringify(option.value),
})
.checked(this.value === option.value)
.onChange((checked) => {
if (checked) {
option.onChecked();
}
})
Text(option.label)
}
})
}
.alignItems(HorizontalAlign.Start)
}
.alignItems(VerticalAlign.Top)
.backgroundColor(Color.White)
.borderRadius(8)
.padding(8)
.width("100%")
}
}
@Entry
@Component
struct Index {
@State expandedRegionLayoutOptions: ExpandedRegionLayoutOptions = {
horizontalSplitRatio: PresetSplitRatio.LAYOUT_3V2,
verticalSplitRatio: PresetSplitRatio.LAYOUT_1V1,
isExtraRegionPerpendicular: true,
extraRegionPosition: ExtraRegionPosition.TOP
};
@State foldingRegionLayoutOptions: HoverModeRegionLayoutOptions = {
horizontalSplitRatio: PresetSplitRatio.LAYOUT_3V2,
showExtraRegion: false,
extraRegionPosition: ExtraRegionPosition.TOP
};
@State foldedRegionLayoutOptions: FoldedRegionLayoutOptions = {
verticalSplitRatio: PresetSplitRatio.LAYOUT_1V1
};
@Builder
MajorRegion() {
Region({
title: "折叠态配置",
compBackgroundColor: "rgba(255, 0, 0, 0.1)",
}) {
Column({ space: 4 }) {
RadioOption({
label: "折叠态垂直高度度比",
value: this.foldedRegionLayoutOptions.verticalSplitRatio,
options: [
{
label: "1:1",
value: PresetSplitRatio.LAYOUT_1V1,
onChecked: () => {
this.foldedRegionLayoutOptions.verticalSplitRatio = PresetSplitRatio.LAYOUT_1V1
}
},
{
label: "2:3",
value: PresetSplitRatio.LAYOUT_2V3,
onChecked: () => {
this.foldedRegionLayoutOptions.verticalSplitRatio = PresetSplitRatio.LAYOUT_2V3
}
},
{
label: "3:2",
value: PresetSplitRatio.LAYOUT_3V2,
onChecked: () => {
this.foldedRegionLayoutOptions.verticalSplitRatio = PresetSplitRatio.LAYOUT_3V2
}
},
{
label: "未定义",
value: undefined,
onChecked: () => {
this.foldedRegionLayoutOptions.verticalSplitRatio = undefined
}
}
]
})
}
.constraintSize({ minHeight: "100%" })
}
}
@Builder
MinorRegion() {
Region({
title: "悬停态配置",
compBackgroundColor: "rgba(0, 255, 0, 0.1)"
}) {
Column({ space: 4 }) {
RadioOption({
label: "悬停态水平宽度比",
value: this.foldingRegionLayoutOptions.horizontalSplitRatio,
options: [
{
label: "1:1",
value: PresetSplitRatio.LAYOUT_1V1,
onChecked: () => {
this.foldingRegionLayoutOptions.horizontalSplitRatio = PresetSplitRatio.LAYOUT_1V1
}
},
{
label: "2:3",
value: PresetSplitRatio.LAYOUT_2V3,
onChecked: () => {
this.foldingRegionLayoutOptions.horizontalSplitRatio = PresetSplitRatio.LAYOUT_2V3
}
},
{
label: "3:2",
value: PresetSplitRatio.LAYOUT_3V2,
onChecked: () => {
this.foldingRegionLayoutOptions.horizontalSplitRatio = PresetSplitRatio.LAYOUT_3V2
}
},
{
label: "未定义",
value: undefined,
onChecked: () => {
this.foldingRegionLayoutOptions.horizontalSplitRatio = undefined
}
},
]
})
SwitchOption({
label: "悬停态是否显示扩展区",
value: this.foldingRegionLayoutOptions.showExtraRegion,
onChange: (checked) => {
this.foldingRegionLayoutOptions.showExtraRegion = checked;
}
})
if (this.foldingRegionLayoutOptions.showExtraRegion) {
RadioOption({
label: "悬停态扩展区位置",
value: this.foldingRegionLayoutOptions.extraRegionPosition,
options: [
{
label: "顶部",
value: ExtraRegionPosition.TOP,
onChecked: () => {
this.foldingRegionLayoutOptions.extraRegionPosition = ExtraRegionPosition.TOP
}
},
{
label: "底部",
value: ExtraRegionPosition.BOTTOM,
onChecked: () => {
this.foldingRegionLayoutOptions.extraRegionPosition = ExtraRegionPosition.BOTTOM
}
},
{
label: "未定义",
value: undefined,
onChecked: () => {
this.foldingRegionLayoutOptions.extraRegionPosition = undefined
}
},
]
})
}
}
.constraintSize({ minHeight: "100%" })
}
}
@Builder
ExtraRegion() {
Region({
title: "展开态配置",
compBackgroundColor: "rgba(0, 0, 255, 0.1)"
}) {
Column({ space: 4 }) {
RadioOption({
label: "展开态水平宽度比",
value: this.expandedRegionLayoutOptions.horizontalSplitRatio,
options: [
{
label: "1:1",
value: PresetSplitRatio.LAYOUT_1V1,
onChecked: () => {
this.expandedRegionLayoutOptions.horizontalSplitRatio = PresetSplitRatio.LAYOUT_1V1
}
},
{
label: "2:3",
value: PresetSplitRatio.LAYOUT_2V3,
onChecked: () => {
this.expandedRegionLayoutOptions.horizontalSplitRatio = PresetSplitRatio.LAYOUT_2V3
}
},
{
label: "3:2",
value: PresetSplitRatio.LAYOUT_3V2,
onChecked: () => {
this.expandedRegionLayoutOptions.horizontalSplitRatio = PresetSplitRatio.LAYOUT_3V2
}
},
{
label: "未定义",
value: undefined,
onChecked: () => {
this.expandedRegionLayoutOptions.horizontalSplitRatio = undefined
}
},
]
})
RadioOption({
label: "展开态垂直高度度比",
value: this.expandedRegionLayoutOptions.verticalSplitRatio,
options: [
{
label: "1:1",
value: PresetSplitRatio.LAYOUT_1V1,
onChecked: () => {
this.expandedRegionLayoutOptions.verticalSplitRatio = PresetSplitRatio.LAYOUT_1V1
}
},
{
label: "2:3",
value: PresetSplitRatio.LAYOUT_2V3,
onChecked: () => {
this.expandedRegionLayoutOptions.verticalSplitRatio = PresetSplitRatio.LAYOUT_2V3
}
},
{
label: "3:2",
value: PresetSplitRatio.LAYOUT_3V2,
onChecked: () => {
this.expandedRegionLayoutOptions.verticalSplitRatio = PresetSplitRatio.LAYOUT_3V2
}
},
{
label: "未定义",
value: undefined,
onChecked: () => {
this.expandedRegionLayoutOptions.verticalSplitRatio = undefined
}
}
]
})
SwitchOption({
label: "展开态扩展区是否上下贯穿",
value: this.expandedRegionLayoutOptions.isExtraRegionPerpendicular,
onChange: (checked) => {
this.expandedRegionLayoutOptions.isExtraRegionPerpendicular = checked;
}
})
if (!this.expandedRegionLayoutOptions.isExtraRegionPerpendicular) {
RadioOption({
label: "展开态扩展区位置",
value: this.expandedRegionLayoutOptions.extraRegionPosition,
options: [
{
label: "顶部",
value: ExtraRegionPosition.TOP,
onChecked: () => {
this.expandedRegionLayoutOptions.extraRegionPosition = ExtraRegionPosition.TOP
}
},
{
label: "底部",
value: ExtraRegionPosition.BOTTOM,
onChecked: () => {
this.expandedRegionLayoutOptions.extraRegionPosition = ExtraRegionPosition.BOTTOM
}
},
{
label: "未定义",
value: undefined,
onChecked: () => {
this.expandedRegionLayoutOptions.extraRegionPosition = undefined
}
},
]
})
}
}
.constraintSize({ minHeight: "100%" })
}
}
build() {
Column() {
FoldSplitContainer({
primary: () => {
this.MajorRegion()
},
secondary: () => {
this.MinorRegion()
},
extra: () => {
this.ExtraRegion()
},
expandedLayoutOptions: this.expandedRegionLayoutOptions,
hoverModeLayoutOptions: this.foldingRegionLayoutOptions,
foldedLayoutOptions: this.foldedRegionLayoutOptions,
})
}
.width("100%")
.height("100%")
}
}
复制代码
折叠态展开态悬停态
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4