HarmonyOS Next星河版笔记--界面开发(4)

news/2024/11/16 3:44:12/

布局

1.1.线性布局

线性布局通过线性容器column和row创建

  • column容器:子元素垂直方向排列
  • row容器:子元素水平方向排列

1.1.1.排布主方向上的对齐方式(主轴)

属性:.justifyContent(枚举FlexAlign)(Row组件的justifyContent属性效果相似)

居顶

.justifyContent(FlexAlign.Start)

居中

.justifyContent(FlexAlign.Center)

居底

.justifyContent(FlexAlign.End)

其他

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column() {Text().width(200).height(100).backgroundColor(Color.Pink).border({width : 2})Text().width(200).height(100).backgroundColor(Color.Pink).border({width : 2}).margin(20)Text().width(200).height(100).backgroundColor(Color.Pink).border({width : 2})}.width('100%').height('100%')//设置排布主方向的对齐方式(主轴)//justifyContent(枚举FlexAlign)   ctrl+p   cmd+p//1、Start      (排布主方向) 主轴起始位置对齐//2、Center      主轴居中对齐//3、End         主轴结束位置对齐//4、SpaceBetween   贴边显示,中间的元素均匀分布间隙//5、SpaceAround    间隙环绕   0.5 1  1  1  0.5的间隙分布,靠边只有一半的间隙//6、SpaceEvenly    间隙均匀环绕,靠边也是完整的一份间隙.justifyContent(FlexAlign.SpaceEvenly)}
}

1.1.2.交叉轴对齐方式

属性:alignItems()

参数:枚举类型

  • 交叉轴在水平方向:HorizontalAlign
  • 交叉轴在垂直方向:VerticalAlign

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {//Column  交叉轴的对齐方式(水平往右)//alignItems(HorizontalAlign.Start)     Center   End//.alignItems(VerticalAlign.Top)    Center        Bottom//Column() {Row(){Text().width(50).height(100).backgroundColor(Color.Pink).border({width : 2})Text().width(50).height(100).backgroundColor(Color.Pink).border({width : 2}).margin({// top:20,// bottom:20left:20,right:20})Text().width(50).height(100).backgroundColor(Color.Pink).border({width : 2})}.width('100%').height('100%')
.alignItems(VerticalAlign.Bottom)}
}

1.2.弹性布局

弹性容器组件:Flex()

基本使用

Flex(参数对象){子组件1子组件2子组件3子组件N}

wrap属性:Flex是单行布局还是多行布局

        1、FlexWrap.NoWrap(单行布局)

        2、FlexWrap.Wrap(多行布局)

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {//flex默认主轴水平往右,交叉轴垂直往下 → row/column//2、主轴对齐方式//3、交叉轴对齐方式//单行或单列的情况,优先还是使用线性布局//Flex布局:伸缩布局。当子盒子的总和溢出父盒子,默认进行压缩显示。//4、换行 wrapFlex({// direction:FlexDirection.Row,// justifyContent:FlexAlign.SpaceAround,// alignItems:ItemAlign.Center
wrap:FlexWrap.Wrap}){Text().width(80).height(80).backgroundColor(Color.Pink).border({width:1,color:Color.Green})Text().width(80).height(80).backgroundColor(Color.Pink).border({width:1,color:Color.Green})Text().width(80).height(80).backgroundColor(Color.Pink).border({width:1,color:Color.Green})Text().width(80).height(80).backgroundColor(Color.Pink).border({width:1,color:Color.Green})}.width(300).height(600).backgroundColor(Color.Blue)}
}

案例

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {
Column(){Text('阶段选择').fontSize(36).fontWeight(700).width('100%').padding(15)Flex({wrap:FlexWrap.Wrap}){Text('ArkUI').padding(15)Text('ArkTS').padding(15)Text('界面开发').padding(15)Text('系统能力').padding(15)Text('权限控制').padding(15)Text('元服务').padding(15)}
}}}

运行效果

1.3.综合案例(列表项)

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column(){Row({space:8}){Column(){Text("玩一玩").fontSize(FontWeight.Bolder)Text('签到有礼|超多tomato 超好吃').fontColor(Color.Gray)}.alignItems(HorizontalAlign.Start)Column(){Image($r('app.media.tomato')).width(40).backgroundColor('#efefef').borderRadius(5)}.alignItems(HorizontalAlign.Center)}.width('90%').height(80).backgroundColor('#fff').borderRadius(10).justifyContent(FlexAlign.SpaceBetween).padding({left:15,right:15}).margin({top:20})}.width("100%").height("100%").backgroundColor(Color.Yellow)}}

1.4.自适应伸缩

设置layoutWeight属性的子元素与兄弟元素,会按照权重进行分配主轴的空间

语法:.layoutWeight(数字)

作用:左边自适应;右边固定

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column(){Row() {Text('左边').layoutWeight(1).height(50).backgroundColor(Color.Pink)Text('右边').width(70).height(50).backgroundColor(Color.Orange)}}.width("100%").height("100%").backgroundColor(Color.Yellow)}}

效果

1.5.综合案例(卡片)

案例

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column() {Column(){
Image($r('app.media.xinlan')).width('100%').borderRadius({topRight:10,topLeft:10})Text('今晚必看 | 每日艺术分享NO.1').fontSize(15).fontWeight(30).padding({left:5,right:5}).lineHeight(22).height(60)//底部Row(){//头像、昵称Row({space:5}){Image($r('app.media.potato')).width(25).borderRadius(100)Text('7373').fontSize(10).fontColor('#999')}.layoutWeight(1)//点赞图标点赞数Row({space:5}){Image($r('app.media.thumbgood')).width(13).fillColor('#999')Text('2.3W').fontSize(13).fontColor('#666')}}.padding({left:15,right:15})}.width(200)//.height(400)//先定死一个高,后续内容撑开.padding({bottom:15}).backgroundColor(Color.White).borderRadius({topLeft:10,topRight:10})}.padding(10).width('100%').height('100%').backgroundColor('#ccc')}
}

1.6.阶段性综合案例

京东页面登录案例

分析:

  1. 布局容器 + 顶部 +logo
    1. 布局背景:backgroundImage
    2. 布局容器:整体从上往下 —— Column
    3. 顶部:左右布局——Row、SpaceBetween
    4. logo:Image图片
  2. 输入框和登录区域
    1. 国家地址:点按区域(Row→Text、Text、Image)
    2. 手机号:输入框TextInput
    3. 同意许可:复选框checkbox,文本Text→Span
    4. 登录按钮、用户注册
  3. 底部模块区域
    1. 整体Column列
    2. 标题Text
    3. 三方登录图标:Row、Image、spacearound
    4. 底部居底:Blank()填充组件

1.7.绝对定位和层级zIndex

1.7.1.绝对定位

作用:控制组件位置,可实现层叠效果

特点:

  1. 参照父组件左上角 进行偏移
  2. 绝对定位后的组件 不占用自身原有位置

语法:.position(位置对象)

参数:{ x : 水平偏移位置 , y : 垂直偏移位置 }

Text('文字内容')
.position({x : 50 ,y : 50 })
@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {//position绝对定位:可以控制组件位置,可以实现层叠效果//语法:// .position({//   x:150,//   y:50// })//特点://1、相对应父组件左顶点进行偏移(调整位置)//2、原本的位置不占了,且可以任意调整位置,不影响其他元素//后面的组件明显层级更高,会盖住前面的组件//需求:不动结构的情况下,调整组件的层级   .zIndex(数字)Column(){Text('大儿子').width(80).height(80).backgroundColor(Color.Gray)Text('二儿子定位').width(80).height(80).backgroundColor(Color.Yellow).position({x:150,y:50}).zIndex(1)Text('三儿子').width(80).height(80).backgroundColor(Color.Green).zIndex(2)}.width(300).height(300).backgroundColor(Color.Pink)}

1.8.层叠布局

层叠布局具有较强的组件层叠能力。场景:卡片层叠效果

特点层叠操作更简洁,代码效率更高(绝对定位的优势是灵活)

Stack  容器内的子元素的顺序为Item1 -> Item2 -> Item3

Stack(){Item1()Item2()Item3()
}

语法

  Stack({alignContent:Alignment.Top}){Item1()Item2()Item3()
}

案例

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {
//层叠布局Stack({alignContent:Alignment.TopStart}){Text('大儿子').width(250).height(250).backgroundColor(Color.Green)Text('二儿子').width(150).height(150).backgroundColor(Color.Orange)Text('三儿子').width(50).height(50).backgroundColor(Color.Yellow)}.width(300).height(600).backgroundColor(Color.Pink)}}

运行效果


http://www.ppmy.cn/news/1547337.html

相关文章

大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手

本文来自腾讯蓝鲸智云社区用户: CanWay 背景 1、运维转型背景 蓝鲸平台从诞生之初,就一直在不遗余力地推动运维转型,让运维团队可以通过一体化PaaS平台,快速编写脚本,编排流程,开发运维工具,从被动地提供…

将答题成绩排行榜数据通过前端生成excel的方式实现导出下载功能

需求是这样的,在答题活动结束后,主办方想要导出排行榜成绩到excel,并能够在小程序里面打开查看、转发或下载保存到本地的功能。 我的实现思路大概是这样,先把排行榜数据按照得分排名顺序,处理成对应的JSON数据结构&…

【机器学习】如何配置anaconda环境(无脑版)

马上就要上机器学习的实验,这里想写一下我配置机器学习的anaconda环境的二三事 一、首先,下载安装包: Download Now | Anaconda 二、打开安装包,一直点NEXT进行安装 这里要记住你要下载安装的路径在哪,后续配置环境…

【数学二】线性代数-二次型

考试要求 1、了解二次型的概念, 会用矩阵形式表示二次型,了解合同变换与合同矩阵的概念. 2、了解二次型的秩的概念,了解二次型的标准形、规范形等概念,了解惯性定理,会用正交变换和配方法化二次型为标准形。 3、理解正定二次型、正定矩阵的概念,并掌握其判别法. 二次型…

实现3D热力图

实现思路 首先是需要用canvas绘制一个2D的热力图,如果你还不会,请看json绘制热力图。使用Threejs中的canvas贴图,将贴图贴在PlaneGeometry平面上。使用着色器材质,更具json中的数据让平面模型 拔地而起。使用Threejs内置的TWEEN&…

ubuntu16.04配置网卡

安装ubuntu16.04到最后选择安装服务时通过空格勾选 rootubuntu:~# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5).source /etc/network/interfa…

使用 Regex 在 Java 中使用 Logstash LogBack 屏蔽日志

在当今数据驱动的世界中,数据安全至关重要。日志记录框架在应用程序监控和调试中起着至关重要的作用,但它们可能会无意中暴露本不应该暴露的敏感信息。日志掩码是一种可以有效地混淆日志消息中的敏感数据以保护机密信息的技术。 了解 Logback Logback …

outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务

微软邮箱反垃圾已经很强大了非常敏感,自家的域名的邮件都能给扔到垃圾邮箱里,但还是在本地增加了一层垃圾邮箱功能,然后垃圾邮箱并没有提示,导致错过很多通知,本身并没有提供关闭的功能,但微软有个Microsof…