往期鸿蒙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企服之家,中国第一个企服评测及商务社交产业平台。 |