欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > HarmonyOS ArkUI(基于ArkTS) 开发布局 (中)

HarmonyOS ArkUI(基于ArkTS) 开发布局 (中)

2024/11/18 9:32:21 来源:https://blog.csdn.net/lingxiaolujun/article/details/143779224  浏览:    关键词:HarmonyOS ArkUI(基于ArkTS) 开发布局 (中)

HarmonyOS ArkUI(基于ArkTS) 开发布局 (上)

四 层叠布局 (Stack)

层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。

层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等

@Entry
@Component
struct Index {build() {Stack(){Column().backgroundColor('#ff6700').width(300).height(300)Column().backgroundColor('blue').width(100).height(100)}.height('100%').width('100%')}
}

后一个元素会覆盖前一个元素,有点类似于小时候玩过的套娃娃,是不是很有趣?

alignContent 对齐方式

一共九种,Top  Bottom Start End Center  TopStart TopEnd BottomStart BottomEnd

Stack({ alignContent: Alignment.样式 })

zIndex 设置层级

子元素(){}.zIndex( 5)   层级越高优先级越高,同级后面元素比前面元素高 

五 弹性布局 (Flex)

基本等价于css中的flex了

direction 布局方向

Flex({ direction: FlexDirection.Row })   除了Row还可以是RowReverse Column ColumnReverse

@Entry
@Component
struct Index {build() {Flex({}){Column().backgroundColor('#ff6700').width(100).height(100)Column().backgroundColor('blue').width(100).height(100)}.height('100%').width('100%')}
}

wrap 布局换行

Flex({ wrap: FlexWrap.NoWrap })  还可以选  WrapReverse  Wrap

justifyContent 主轴对齐方式

Flex({justifyContent:FlexAilgn.Start})

alignItems 交叉轴对齐方式

  • Flex({alignItems:ItemAlign.Auto})
  • ItemAlign.Auto:使用Flex容器中默认配置。
  • ItemAlign.Start:交叉轴方向首部对齐。
  • ItemAlign.Center:交叉轴方向居中对齐。
  • ItemAlign.End:交叉轴方向底部对齐。
  • ItemAlign.Stretch:交叉轴方向拉伸填充,在未设置尺寸时,拉伸到容器尺寸。
  • temAlign. Baseline:交叉轴方向文本基线对齐。

子元素可以通过 . alignSelf (值同上) 的方式 设置独立的对齐方式优先于全局

alignContent 内容对齐

可以通过alignContent参数设置子元素各行在交叉轴剩余空间内的对齐方式,只在多行的Flex布局中生效,可选值有:参考 justifyContent主轴对齐

六 相对布局 (RelativeContainer)

笔者不会,等会了在补充,上面是官方链接

七 栅格布局 (GridRow/GridCol)

栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用

栅格容器GridRow

栅格系统以设备的水平宽度(屏幕密度像素值,单位vp)作为断点依据,定义设备的宽度类型,形成了一套断点规则。开发者可根据需求在不同的断点区间实现不同的页面布局效果

断点名称取值范围(vp)设备描述
xs[0, 320)最小宽度类型设备。
sm[320, 520)小宽度类型设备。
md[520, 840)中等宽度类型设备。
lg[840, +∞)大宽度类型设备。

breakpoints自定义修改断点的取值范围

最多支持6个断点,(xs, sm, md, lg, xl, xxl)设备的布局设置。

breakpoints: {value: ['320vp', '520vp', '840vp', '1080vp']}0 -322 xs 320 - 520 sm 以此类推

columns 布局的总列数

GridRow({ columns: 12 }) 默认12列

direction 排列方向

可选值: Row RowReverse

GridRow({ direction: GridRowDirection.Row }){}

gutter 子组件间距

GridRow中通过gutter属性设置子元素在水平和垂直方向的间距。

 GridRow({ gutter: 10 }){}GridRow({ gutter: { x: 10, y: 10 } }){}俩种写法,上面的是等价的

子组件GridCol

GridCol组件作为GridRow组件的子组件,通过给GridCol传参或者设置属性两种方式,设置span(占用列数),offset(偏移列数),order(元素序号)的值。

span

let Gspan:Record<string,number> = { 'xs': 1, 'sm': 2, 'md': 3, 'lg': 4 }
GridCol({ span: 2 }){}
GridCol({ span: { xs: 1, sm: 2, md: 3, lg: 4 } }){}
GridCol(){}.span(2)
GridCol(){}.span(Gspan)

offset

栅格子组件相对于前一个子组件的偏移列数,默认为0。

order

栅格子组件的序号,决定子组件排列次序。当子组件不设置order或者设置相同的order, 子组件按照代码顺序展示。当子组件设置不同的order时,order较小的组件在前,较大的在后。

媒体查询 (@ohos.mediaquery)

跟传统的ccs媒体查询不同,它类似于js监听条件然后做出改变

语法:[媒体类型media-type] [媒体逻辑操作media-logic-operations] [媒体特征(media-feature)]

例如:

  • screen and (round-screen: true) :表示当设备屏幕是圆形时条件成立。

  • (max-height: 800px) :表示当高度小于等于800px时条件成立。

  • (height <= 800px) :表示当高度小于等于800px时条件成立。

  • screen and (device-type: tv) or (resolution < 2) :表示包含多个媒体特征的多条件复杂语句查询,当设备类型为tv或设备分辨率小于2时条件成立。

  • (dark-mode: true) :表示当系统为深色模式时成立。

import { mediaquery } from '@kit.ArkUI'; //引入媒体查询
@Entry
@Component
struct Index {@State color: string = '#DB7093';listener: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)');//设置监听onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) {if (mediaQueryResult.matches as boolean) { // 若设备为横屏状态,更改相应的页面布局this.color = '#FFD700';} else {this.color = '#DB7093';}}aboutToAppear() {// 绑定当前应用实例// 绑定回调函数this.listener.on('change', (mediaQueryResult: mediaquery.MediaQueryResult) => {this.onPortrait(mediaQueryResult)});}aboutToDisappear() {// 解绑listener中注册的回调函数this.listener.off('change');}build() {Flex({}){Column().backgroundColor(this.color).width(100).height(100)}.height('100%').width('100%')}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com