/*
* Copyright (c) 2023-2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { LengthMetrics } from '@ohos.arkui.node';
const TEXT_MARGIN_TOP_4: number = 4;
const TEXT_MARGIN_BOTTOM_8: number = 8;
const TEXT_MARGIN_BOTTOM_24: number = 24;
const TEXT_MARGIN_LEFT_48: number = 48;
const TEXT_MARGIN_RIGHT_48: number = 48;
@Component
export struct SplitLayout {
@BuilderParam container: () => void;
@State sizeValue: string = '';
@State areaWidth: number = 0;
@State imageBackgroundColor: string = '#19000000';
@State mainImage?: Resource = undefined;
@Prop primaryText: string = '';
secondaryText?: string = '';
tertiaryText?: string = '';
build() {
Column() {
if (this.areaWidth <= 600) {
GridRow({
columns: 4,
breakpoints: {
reference: BreakpointsReference.WindowSize },
direction: GridRowDirection.Row
}) {
GridCol({ span: { xs: 4, sm: 4, md: 4, lg: 4 } }) {
Column() {
Stack({ alignContent: Alignment.Bottom }) {
Image(this.mainImage)
.height('100%')
.width('100%')
Scroll() {
Column() {
Text(this.primaryText)
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
.fontSize($r('sys.float.Title_M'))
.fontColor($r('sys.color.ohos_id_color_text_primary'))
Text(this.secondaryText)
.textAlign(TextAlign.Center)
.fontSize($r('sys.float.Body_M'))
.fontColor($r('sys.color.ohos_id_color_text_primary'))
.margin({ top: TEXT_MARGIN_TOP_4, bottom: TEXT_MARGIN_BOTTOM_8 })
Text(this.tertiaryText)
.textAlign(TextAlign.Center)
.fontSize($r('sys.float.Caption_M'))
.fontColor($r('sys.color.ohos_id_color_text_secondary'))
.margin({ bottom: TEXT_MARGIN_BOTTOM_24 })
}
.alignItems(HorizontalAlign.Center)
.margin({
left: $r('sys.float.ohos_id_max_padding_start'),
right: $r('sys.float.ohos_id_max_padding_end'), })
}.scrollBar(BarState.On)
.nestedScroll({
scrollForward: NestedScrollMode.SELF_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST,
})
}
.height('34%')
.width('100%')
Column() {
this.container()
}
.height('66%')
.width('100%')
}
}
}
} else if (600 < this.areaWidth && this.areaWidth <= 840) {
GridRow({
columns: 8,
breakpoints: {
reference: BreakpointsReference.WindowSize },
direction: GridRowDirection.Row
}) {
GridCol({ span: { xs: 8, sm: 8, md: 8, lg: 8 } }) {
Column() {
Row() {
Image(this.mainImage)
.margin({ start: LengthMetrics.vp(96), end: LengthMetrics.vp(36) })
.height('60%')
.width('20%')
Scroll() {
Column() {
Text(this.primaryText)
.fontWeight(FontWeight.Medium)
.fontSize($r('sys.float.Title_M'))
.fontColor($r('sys.color.ohos_id_color_text_primary'))
Text(this.secondaryText)
.fontSize($r('sys.float.Body_M'))
.fontColor($r('sys.color.ohos_id_color_text_primary'))
.margin({ top: TEXT_MARGIN_TOP_4, bottom: TEXT_MARGIN_BOTTOM_8 })
Text(this.tertiaryText)
.fontSize($r('sys.float.Caption_M'))
.fontColor($r('sys.color.ohos_id_color_text_secondary'))
.margin({ bottom: TEXT_MARGIN_BOTTOM_24})
}
.width('42%')
.alignItems(HorizontalAlign.Start)
.margin({ end: LengthMetrics.vp(96) })
}.scrollBar(BarState.On)
.nestedScroll({
scrollForward: NestedScrollMode.SELF_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST,
})
}
.backgroundColor(this.imageBackgroundColor)
.height('34%')
.width('100%')
Column() {
this.container()
}
.width('100%')
.height('66%')
}
}
}
} else if (this.areaWidth > 840) {
GridRow({
columns: 12,
breakpoints: {
reference: BreakpointsReference.WindowSize },
direction: GridRowDirection.Row
}) {
GridCol({ span: { xs: 4, sm: 4, md: 4, lg: 4 } }) {
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) {
Image(this.mainImage)
.height('17%')
.width('34%')
.margin({ bottom: 36 })
Scroll() {
Column() {
Text(this.primaryText)
.textAlign(TextAlign.Center)
.fontWeight(FontWeight.Medium)
.fontSize($r('sys.float.Title_M'))
.fontColor($r('sys.color.ohos_id_color_text_primary'))
.margin({ left: TEXT_MARGIN_LEFT_48, right: TEXT_MARGIN_RIGHT_48 })
Text(this.secondaryText)
.textAlign(TextAlign.Center)
.fontSize($r('sys.float.Body_M'))
.fontColor($r('sys.color.ohos_id_color_text_primary'))
.margin({ top: TEXT_MARGIN_TOP_4, bottom: TEXT_MARGIN_BOTTOM_8,
left: TEXT_MARGIN_LEFT_48, right: TEXT_MARGIN_RIGHT_48 })
Text(this.tertiaryText)
.textAlign(TextAlign.Center)
.fontSize($r('sys.float.Caption_M'))
.fontColor($r('sys.color.ohos_id_color_text_secondary'))
.margin({ left: TEXT_MARGIN_LEFT_48, right: TEXT_MARGIN_RIGHT_48, bottom: TEXT_MARGIN_BOTTOM_24 })
}.alignItems(HorizontalAlign.Center)
.margin({
left: $r('sys.float.ohos_id_max_padding_start'),
right: $r('sys.float.ohos_id_max_padding_end'), })
}.scrollBar(BarState.On)
.nestedScroll({
scrollForward: NestedScrollMode.SELF_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST,
})
}
.width('100%')
.height('100%')
.backgroundColor(this.imageBackgroundColor)
}
.height('100%')
GridCol({ span: { xs: 8, sm: 8, md: 8, lg: 8 } }) {
this.container()
}
}.width('100%')
}
}
.onAreaChange((oldValue: Area, newValue: Area) => {
console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)
this.sizeValue = JSON.stringify(newValue)
this.areaWidth = parseInt(newValue.width.toString(), 0);
console.info(`pingAce: on area change, oldValue is` + this.areaWidth)
console.info(`pingAce: on area change, oldValue is` + parseInt(newValue.height.toString(), 0))
})
}
}