四、ArkUI界面设计3(高级布局)

HarmonyOS开发(ArkUI简单使用) Componentbuild(){//组件UI描述@Componentbuild(){//使用组件Com({title:'标题'})//UI描述@Componentbuild(){@Component//UI描述build(){ 阅读详情

此节核心:

  1. 弹性布局 Flex
  2. 定位
  3. 层叠布局

241004

1. 弹性布局 Flex

弹性布局Flex与线性布局LinearLayout主要区别:弹性布局中子组件灵活性相对较大,可自动换行。当出现子组件大小不等且每行排列数目不一时推荐使用弹性布局Flex,其他情况推荐线性布局LinearLayout。

Flex提供更加有效的方式对容器中的子组件进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。

容器默认存在主轴(主轴默认水平方向)与交叉轴,子组件默认沿主轴排列,子组件在主轴方向的尺寸成为主轴尺寸,在交叉轴方向的尺寸成为交叉轴尺寸。

1.1 Flex基本使用
//弹性容器组件Flex的基本使用
Flex(参数对象) {
⼦组件1
 ⼦组件2
 ⼦组件3
 ⼦组件N
}
1.2 布局方向 direction

在弹性布局中,容器的子组件可以按照任意方向排列(默认水平排列)。通过设置参数direction,可以决定主轴方向,从而控制子组件的排列方向。

参数direction的值:枚举FlexDirection

枚举值描述
Row主轴水平,(默认值),从起始端开始排列
RowReverse主轴水平,排列顺序与Row相反,从终点端开始排列
Column主轴垂直,从起始端开始排列,较常用
ColumnReverse主轴垂直,排列顺序与Column相反,从终点端开始排列

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column({space:10}){
      //Flex布局,默认主轴在水平方向,子组件水平排列
      Flex(){
        Text('1')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('2')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('3')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
      }
        .width('100%')
        .height(200)
        .backgroundColor(Color.Orange)

      //Flex布局,设置主轴在垂直方向,子组件垂直排列
      Flex({direction:FlexDirection.Column}){
        Text('1')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('2')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('3')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
      }
      .width('100%')
      .height(200)
      .backgroundColor(Color.Orange)

    }
      .padding(10)
  }
}

预览器效果:

1.3 主轴对齐方式 justifyContent

参数 justifyContent 的值:枚举FlexAlign;与线性布局主轴对齐方式相同。

justifyContent : FlexAlign.Start、Center、End、SpaceBetween、SpaceAround、SpaceEvenly。

1.4 交叉轴对齐方式 alignItems

参数 alignItems 的值:枚举ItemAlign

alignItems : ItemAlign.Start、Center、End、Stretch、Baseline。

子组件的alignSelf属性也可以设置子组件在父容器交叉轴的对齐格式,且会覆盖Flex布局容器中的alignItems配置。

示例代码:

@Entry
@Component
struct Index {
  build() {
    //Flex布局,主轴justifyContent、交叉轴alignItems对齐方式及alignSelf属性测试
    Column({space:10}){
      //设主轴布局方式为SpaceBetween,交叉轴居中Center,子组件Text(2)Stretch拉伸
      Flex({
        justifyContent:FlexAlign.SpaceBetween,
        alignItems:ItemAlign.Center
      }){
        Text('1')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('2')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
          .alignSelf(ItemAlign.Stretch)
        Text('3')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
      }
        .width('100%')
        .height(200)
        .backgroundColor(Color.Orange)
    }
      .padding(10)
  }
}

预览器效果:

DevEco代码上下换行快捷键:Alt+Shift+↑/↓


241005

1.5 布局换行 wrap

弹性布局分为单⾏布局和多⾏布局。默认情况下,Flex容器中的⼦元素都排在⼀条线(⼜称“轴线”)上。⼦元素尺⼨总和⼤于Flex容器尺⼨时,⼦元素尺⼨会⾃动挤压。

wrap属性控制当⼦元素主轴尺⼨之和⼤于容器主轴尺⼨时,Flex是单⾏布局还是多⾏布局。在多⾏布局时,通过交叉轴⽅向,确认新⾏排列⽅向。

参数 wrap 的值:枚举FlexWrap,默认NoWrap

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      Flex({
        wrap:FlexWrap.Wrap
      }){
        Text('1')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('2')
          .width(80)
          .height(30)
          .backgroundColor(Color.Pink)
        Text('3')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('4')
          .width(80)
          .height(30)
          .backgroundColor(Color.Pink)
        Text('5')
          .width(80)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('6')
          .width(80)
          .height(30)
          .backgroundColor(Color.Pink)
      }
      .width('100%')
      .height(200)
      .backgroundColor(Color.Orange)
    }
      .padding(10)
  }
}

预览器效果:

1.6 综合案例-阶段选择菜单

示例代码:

import { colorSpaceManager } from '@kit.ArkGraphics2D'

@Entry
@Component
struct Index {
  build() {
    Column(){
      //案例内容练习
      Column(){
        //标题
        Text('阶段选择')
          .width('100%')
          .fontSize(24)
          .fontWeight(700)
          .padding(10)
        //弹性布局练习
        Flex({
          //子组件自动换行
          wrap:FlexWrap.Wrap,
        }){
          //练习中Text文本内容可改可不改,重点练习布局属性及参数,后期调用数据库
          Text('ArkUI')
            .padding(10)
            .margin(5)
            .backgroundColor('#f6f7f9')
          Text('ArkTS')
            .padding(10)
            .margin(5)
            .backgroundColor('#f6f7f9')
          Text('界面开发')
            .padding(10)
            .margin(5)
            .backgroundColor('#f6f7f9')
          Text('系统能力')
            .padding(10)
            .margin(5)
            .backgroundColor('#f6f7f9')
          Text('权限控制')
            .padding(10)
            .margin(5)
            .backgroundColor('#f6f7f9')
          Text('元服务')
            .padding(10)
            .margin(5)
            .backgroundColor('#f6f7f9')
        }
      }
      .width('100%')
      .height('100%')
      .padding(10)
    }
  }
}

预览器效果:

案例中遇到问题:对padding和margin组合使用后效果不熟悉,造成自己独立完成时卡壳。

1.7 自适应拉伸
1.7.1 flexGrow

作用:设置父容器的剩余空间分配给此属性所在组件的比例。

属性flexGrow的参数为数字,即占用父级剩余尺寸的份数。

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      //flexGrow:分配父组件剩余尺寸,数字表示占用份数。
      Flex(){
        Text('1')
          .width(50)
          .height(30)
          .backgroundColor(Color.Yellow)
        Text('2')
          .height(30)
          .backgroundColor(Color.Pink)
          .flexGrow(2)
        Text('3')
          .height(30)
          .backgroundColor(Color.Yellow)
          .flexGrow(1)
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Orange)
    }
      .padding(10)
  }
}

预览器效果:

1.7.2 flexBasis

作⽤:设置⼦元素在⽗容器主轴⽅向上的基准尺⼨。flexBasis可以设置为具体的长度值(如50px、10%)或者auto。当设置为具体长度值时,它决定了项目在分配多余空间之前的基础大小。
效果:flexBasis是在弹性盒子布局(Flexbox)中使用的,它允许项目在保持一定基础大小的同时,还能根据可用空间进行伸缩。

flexBasis是设置项目的基础大小,而不是最终大小。最终大小还取决于flexGrow和flexShrink以及容器的总空间。

属性:flexBasis(数字)

参数:数字,基准尺⼨(单位vp)。

2. 定位

作用:改变组件位置。

  • 绝对定位:position,相对父组件左上角进行修改。
  • 相对定位:offset,相对自身左上角进行偏移。
2.1 绝对定位 position

position(){ x:水平偏移量, y:垂直偏移量}

偏移量取值:数字,单位为vp;百分比,参照父组件尺寸计算结果。

绝对定位特点:

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

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column({space:10}){
      //无position属性值
      Column(){
        Text('1')
          .width(50)
          .height(30)
          .backgroundColor(Color.Blue)
        Text('2')
          .width(50)
          .height(30)
          .backgroundColor(Color.Orange)
        Text('3')
          .width(50)
          .height(30)
          .backgroundColor(Color.Yellow)
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)

      //对Text('1')子组件设置position,查看对比效果
      Column(){
          Text('1')
            .width(50)
            .height(30)
            .backgroundColor(Color.Blue)
            .position({x:0,y:0})
          Text('2')
            .width(50)
            .height(30)
            .backgroundColor(Color.Orange)
          Text('3')
            .width(50)
            .height(30)
            .backgroundColor(Color.Yellow)
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)
    }
    .padding(10)
  }
}

预览器效果:

2.2 相对定位 offset

offset(){ x:水平偏移量, y:垂直偏移量}

偏移量取值:数字,单位为vp;百分比,参照父组件尺寸计算结果。

相对定位特点:

  1. 相对自身左上角进行偏移
  2. 相对定位后的组件仍然占用自身原有位置

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column({space:10}){
      //无offset属性值
      Column(){
        Text('1')
          .width(50)
          .height(30)
          .backgroundColor(Color.Blue)
        Text('2')
          .width(50)
          .height(30)
          .backgroundColor(Color.Orange)
        Text('3')
          .width(50)
          .height(30)
          .backgroundColor(Color.Yellow)
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)

      //对Text('1')子组件设置offset,查看对比效果
      Column(){
          Text('1')
            .width(50)
            .height(30)
            .backgroundColor(Color.Blue)
            .offset({x:10,y:10})
          Text('2')
            .width(50)
            .height(30)
            .backgroundColor(Color.Orange)
          Text('3')
            .width(50)
            .height(30)
            .backgroundColor(Color.Yellow)
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)
    }
    .padding(10)
  }
}

预览器效果:

2.3 案例-人气热播故事

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      //喜马拉雅-人气热播故事,简单案例自主练习
      Column(){
        //主图
        Image($r('app.media.moco'))
          .width(300)
          .borderRadius(15)
        //左上角VIP样式标识
        Text('VIP')
          .padding({
            top:3,bottom:3,left:5,right:5})
          .fontWeight(600)
          .fontColor(Color.White)
          .fontStyle(FontStyle.Italic) //斜体
          .position({
            x:0,y:0
          })
          .border({width:3,color:Color.White})
          .borderRadius({topLeft:15,bottomRight:15})
          .backgroundColor(Color.Orange)
          //遗漏,二次补齐属性
          /*.textAlign(TextAlign.Center)
          .fontSize(15)
          .width(34)
          .height(20)*/

        //下方简单介绍
        Row({space:20
        }){
          Image($r('app.media.ic_device_earphone_roc_filled'))
            .fillColor(Color.White)
            .width(40)
            .backgroundColor('#ADD8E6')
            .borderRadius(25)
            .padding(5)
          Text('飞狗MOCO')
            .fontWeight(700)
            .fontSize(28)
        }
        .padding(10)
        .width(300)
        //遗漏,二次补齐属性,交叉轴对齐方式
        .alignItems(VerticalAlign.Top)
      }
      // .borderRadius({topLeft:15,topRight:15})
      .backgroundColor(Color.White)
      .padding({left:5,right:5})
    }
    .width('100%')
    .height('100%')
    .padding(10)
    .backgroundColor('#ededed')
  }
}

预览器效果:

2.4 Z序控制 zIndex

定义后的组件,默认后定义的组件在最上面显示,可以通过zIndex属性调整显示层级。用于控制元素在页面上的层叠顺序。

zIndex(),特点:取值为整数数字;取值越大,显示层级越高。

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column({space:5}){
      //无position无zIndex
      Column(){
        Text('1')
          .width(50)
          .height(30)
          .backgroundColor(Color.Blue)
        Text('2')
          .width(50)
          .height(30)
          .backgroundColor(Color.Orange)
        Text('3')
          .width(50)
          .height(30)
          .backgroundColor(Color.Yellow)
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)

      //Text1,3有绝对定位position,无zIndex设置
      //从上到下覆盖效果为321,按Text组件顺序显示,默认"后来者居上"
      Column(){
        Text('1')
          .width(50)
          .height(30)
          .backgroundColor(Color.Blue)
          .position({x:135,y:15})
        Text('2')
          .width(50)
          .height(30)
          .backgroundColor(Color.Orange)
        Text('3')
          .width(50)
          .height(30)
          .backgroundColor(Color.Yellow)
          .position({x:165,y:20})
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)

      //Text1,3有绝对定位position,且有zIndex设置
      //从上到下覆盖效果为123,按zIndex属性值大小显示
      Column(){
        Text('1')
          .width(50)
          .height(30)
          .backgroundColor(Color.Blue)
          .position({x:135,y:15})
          .zIndex(2)
        Text('2')
          .width(50)
          .height(30)
          .backgroundColor(Color.Orange)
          .zIndex(1)
        Text('3')
          .width(50)
          .height(30)
          .backgroundColor(Color.Yellow)
          .position({x:165,y:20})
      }
      .width('100%')
      .height(100)
      .backgroundColor(Color.Pink)
    }
    .padding(5)
    .backgroundColor('#ededed')
  }
}

预览器效果:


241006

3. 层叠布局 StackLayout

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

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

3.1 基本使用

Stack组件为容器组件,容器内可包含各种子元素。其中子元素默认进行居中堆叠。子元素被约束在Stack下,进行自己的样式定义及排列。

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      //4.3.1 层叠布局,添加三个子组件,默认层叠效果显示
      //层叠效果默认后来者居上,且其默认对齐方式为center,效果居中层叠
      Stack(){
        Column(){
        }
        .width(250)
        .height(200)
        .backgroundColor(Color.Yellow)

        Text('文字')
          .width(150)
          .height(150)
          .backgroundColor(Color.Orange)

        Button('按钮')
          .width(80)
          .height(40)
      }
      .width(300)
      .height(300)
      .backgroundColor(Color.Gray)
    }
    .padding(5)
    .backgroundColor('#ededed')
  }
}

预览器效果:

3.2 对齐方式 alignContent

参数alignContent取值为枚举Alignment,前几个章节有提到过,Alignment枚举以下简单略过。

TopStart、Top、TopEnd、Start、Center、End、BottomStart、Bottom、BottonEnd。

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      //4.3.2 层叠布局,三个子组件,添加对齐方式alignContent后其层叠效果显示
      //层叠效果默认后来者居上(可添加zIndex改变默认层叠效果)
      Stack({
        //对齐方式以左下作为起始段
        alignContent:Alignment.BottomStart
      }){
        Column(){
        }
        .width(250)
        .height(200)
        .backgroundColor(Color.Yellow)

        Text('文字')
          .width(150)
          .height(150)
          .backgroundColor(Color.Orange)

        Button('按钮')
          .width(80)
          .height(40)
      }
      .width(300)
      .height(300)
      .backgroundColor(Color.Gray)
    }
    .padding(5)
    .backgroundColor('#ededed')
  }
}

预览器效果:

3.3 Z序控制 zIndex

(此节2.4)

定义后的组件,默认后定义的组件在最上面显示,可以通过zIndex属性调整显示层级。用于控制元素在页面上的层叠顺序。

zIndex(),特点:取值为整数数字;取值越大,显示层级越高。

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      //4.3.3 层叠布局,三个子组件,添加对齐方式alignContent后其层叠效果显示
      //层叠效果默认后来者居上(可添加zIndex改变默认层叠效果)
      //添加zIndex使Text组件在最上层
      Stack({
        //对齐方式以左下作为起始端
        alignContent:Alignment.BottomStart
      }){
        Column(){
        }
        .width(250)
        .height(200)
        .backgroundColor(Color.Yellow)

        Text('文字')
          .width(150)
          .height(150)
          .backgroundColor(Color.Orange)
          .zIndex(1)

        Button('按钮')
          .width(80)
          .height(40)
          //添加相对定位属性更方便查看层叠效果
          .offset({
            x:120,y:0
          })
      }
      .width(300)
      .height(300)
      .backgroundColor(Color.Gray)
    }
    .padding(5)
    .backgroundColor('#ededed')
  }
}

预览器效果:

4. 综合案例-B站视频推荐卡片

示例代码:

@Entry
@Component
struct Index {
  build() {
    Column(){
      /*布局思路:
        1.Stack容器,Image+Row(图标+文字),zIndex层叠效果
        2.Row(){Text组件,文本超长显示方式textOverflow
                Row(文字+图标)
              }
      */

      //案例B站视频推荐卡片练习
      Column(){
        //1.图片区域 Stack层叠布局
        Stack({ //层叠对齐方式,alignContent底端对齐
          alignContent:Alignment.Bottom}) {
          //视频封面
          Image($r('app.media.tieyi'))
            .width('100%')
            .height(125)
            //图片缩放
            // .objectFit(ImageFit.Contain)
            .borderRadius({topLeft:15,topRight:15})

          Row(){
            //左方播放数量及弹幕数量显示
            Row({space:5}){
              Image($r('app.media.ic_bofangshu'))
                .width(15)
                .fillColor(Color.White)
              Text('282万')
                .fontColor(Color.White)
              Image($r('app.media.ic_danmu'))
                .width(15)
                .fillColor(Color.White)
              Text('8655')
                .fontColor(Color.White)
            }
            //右方视频时长
            Text('4:33')
              .fontColor(Color.White)
          }
          .padding(5)
          .width('100%')
          //主轴对齐方式SpaceBetween
          .justifyContent(FlexAlign.SpaceBetween)
          //此效果也可用Blank()空白填充组件来实现,占用剩余空间

          // .backgroundColor(Color.Black)
        }

        //2.文字区域 Row
        Column({space:5}){
          //标题文字及简单介绍
          Text('【凤凰传奇新歌】欢迎来到国风统治区:唢呐一响神曲《铁衣》')
            .fontSize(14)
            .width('100%')
            .maxLines(2)
            .textOverflow({overflow:TextOverflow.Ellipsis})
          //点赞数量及‘更多’图标
          Row(){
            Text('19万点赞')
              .backgroundColor(Color.Pink)
              .fontSize(13)
              .fontColor(Color.Red)
              .padding(2)
            Image($r('app.media.ic_gengduo'))
              .width(15)
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
        }
        .padding({top:8,left:5,right:5,bottom:10})
      }
      .width(200)
      .backgroundColor('#fff')
      .borderRadius(15)

    }
    .padding(10)
    .width('100%')
    .height('100%')
    .backgroundColor('#ededed')
  }
}

预览器效果:

鸿蒙应用开发之UI框架方舟ArkUI使用参考 HarmonyOS提供了⼀套UI开发框架,即⽅⾈开发框架(ArkUI框架)。⽅⾈开发框架可为开发者提供应⽤UI开发所必需的能⼒,⽐如多种组件、布局计算、动画能⼒、UI交互、绘制等。 阅读详情

相关推荐

鸿蒙应用开发学习-初识ArkUI

方舟开发框架(简称:ArkUI)

初一十五的博客 1976

ArkUI,更高效的框架设计

在预编译的过程中,数据的静态类型信息会携带在生成的统一字节码中,后端编译的时候能直接利用这种类型信息加速机器码的执行,避免了运行时收集对象造成的额外开销,同时这些类型信息被用于AOT编译过程,使得应用启动时就可以执行AOT生成的优化机器码获得高性能运行体验。完成项目开发将项目进行打包时,方舟编译器将编写的高级编程语言通过内置的工具链,编译为一种与运行设备和系统无关的可移植介质,这种介质就叫统一字节码(又称方舟码,abc文件),这个过程也称为字节码预编译。完整版的内容可查看上方的视频,我们下期再见~

HarmonyOSDev的博客 3963

鸿蒙ArkUI之【如何选择布局?】

声明式UI提供了以下9种常见布局,开发者可根据实际应用场景选择合适的布局进行页面开发。position、offset等属性影响了布局容器相对于自身或其他组件的位置。

m0_62167422的博客 1486

【HarmonyOS4.0】第四篇-ArkUI基础实战

ArkUI开发框架是方舟开发框架的简称,它是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架,它使用极简的UI信息语法、丰富的UI组件以及实时界面语言工具,帮助开发者提升应用界面开发效率 30%,开发者只需要使用一套 TS / JS API,就能在多个 HarmonyOS / OpenHarmony 设备上提供既丰富又流畅的用户界面体验。

weixin_42533732的博客 3386

鸿蒙(HarmonyOS)ArkUI布局优化指南~

DevEco Studio内置ArkUI Inspector工具,开发者可以使用ArkUI Inspector,在DevEco Studio上查看应用在真机上的UI显示效果。利用ArkUI Inspector工具,开发者可以快速定位布局不理想或其他UI相关问题,同时也可以观察和了解不同组件之间的布局关系和属性。鸿蒙战略胜利,目前鸿蒙开发是一个急需要人才的缺口,在未来几年势必会有大量的鸿蒙岗位出现,目前所存在的鸿蒙岗位也是给出了相当高的薪资。事实证明,鸿蒙开发确实是一块香饽饽。

weixin_48091641的博客 1591

鸿蒙ArkUI布局性能优化实战

鸿蒙ArkUI布局与性能优化技术通过2x2 RC布局方案简化多设备适配,采用弹性排列与媒体查询实现响应式布局,利用RelativeContainer减少嵌套层级提升性能。同时通过组件懒加载与复用机制降低内存占用,优化渲染效率。这些技术有效解决了多设备适配复杂性和性能瓶颈问题,为开发者提供了轻量化、高性能的跨设备开发方案。

2501_93035758的博客 1435

鸿蒙ArkUI布局与样式进阶(四)——从 Column 到 Grid,一篇搞懂常用布局(含实战案例与逐行注释)

本文系统介绍了鸿蒙ArkUI六大核心布局:Column(垂直布局)、Row(水平布局)、Flex(弹性布局)、Position(绝对定位)、Stack(层叠布局)和Grid(网格布局)。通过生动的比喻和详细代码示例,解析了每种布局的特点、参数说明和适用场景,并提供了综合实战案例和对比总结表。文章特别指出:Position需谨慎使用,Flex嵌套要注意性能,建议先用Row/Column搭骨架,再用Flex/Stack微调。掌握这些布局可满足80%的UI开发需求,是构建电商首页、视频推荐页等复杂界面的关键。

2502_91577682的博客 1897

鸿蒙开发基础 —— ArkUI 页面布局解析

为实现上述效果,开发者需要在页面中声明对应的元素。针对不同的页面结构,ArkUI提供了不同的布局组件来帮助开发者实现对应布局的效果,例如Row用于实现线性布局。组件按照布局的要求依次排列,构成应用的页面。在声明式UI中,所有的页面都是由自定义组件构成,开发者可以根据自己的需求,选择合适的布局进行页面开发。布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。声明式UI提供了以下10种常见布局,开发者可根据实际应用场景选择合适的布局进行页面开发。布局相关的容器组件可形成对应的布局效果。

guangxishaoji的博客 784

【HarmonyOS】ArkUI 布局与容器组件

在 HarmonyOS 应用开发中,优秀的界面布局是用户体验的基础。ArkUI 作为新一代声明式 UI 开发框架,提供了丰富多样的布局组件和容器组件,帮助开发者高效构建复杂界面。本文将系统性地介绍 ArkUI 的核心布局方式,包括线性布局、层叠布局、弹性布局等基础布局,以及列表、轮播、选项卡等高级容器组件。Swiper() {.aspectRatio(2) //宽高比为2Indicator.dot()// 小圆点.itemWidth(20)// 默认的宽.itemHeight(20)//默认的高。

2401_88174794的博客 1007

【鸿蒙开发实战篇】详细介绍ArkUI中线性布局,层叠布局和弹性布局

三个布局组件讲完了,篇幅还是蛮大的,其实看过鸿蒙开发者官方文档的人应该也都发现了,本篇文章知识点的讲解顺序就是按照官方文档来的,看了每个知识点,然后分别手写下对应的demo和自己的理解,后面其他布局组件都也会以这种方式讲解,枯燥是枯燥了点,但相比于仅仅是看文档来说,这才是最有效的掌握知识点的方法。

HarmonyOS_001的博客 1480

【鸿蒙基于API 13实战开发】—— ArkUI 页面布局解析

组件按照布局的要求依次排列,构成应用的页面。在声明式UI中,所有的页面都是由自定义组件构成,开发者可以根据自己的需求,选择合适的布局进行页面开发。布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。

shangkangba的博客 987

鸿蒙4.0应用开发——ArkUI基本布局

组件按照布局的要求依次排列,构成应用的页面。在声明式UI中,所有的页面都是由自定义组件构成,开发者可以根据自己的需求,选择合适的布局进行页面开发。布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中,需要遵守以下流程保证整体的布局效果:确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大小。组件:必备属性 功能属性 位置属性。

高心星的专栏 2126

HarmonyOS 开发探索: ArkUI常用样式布局

ArkUI支持多种布局方式,包括但不限于Column、Row、Stack、Flex等。

DMZDAMS的博客 1323

HarmonyOS应用基础阶段- 07、ArkUI框架—高级布局

本文介绍了线性布局(LinearLayout)的基本使用方法,主要包括Row和Column两种容器的特性。在Row容器中,子元素水平排列;Column容器中垂直排列。通过space属性可设置子元素间距,justifyContent()控制主轴对齐方式,alignItems()调整交叉轴对齐。文章还展示了得物产品卡片的实现案例,并说明单个子元素可通过alignSelf()实现交叉轴对齐效果。实际开发中需注意布局容器在交叉轴方向需预留足够空间才能使对齐属性生效。

分享前端与鸿蒙开发技术、面试题总结 1268

ARKUI布局容器

ForEach遍历生成ListItem的时候,末尾可以用,(item:Object)=>JSON.stringfy(item)作为唯一的key。上面那四个点的图标,是因为menus数组里面超出3个了,所以用这个图标代替,点击的时候弹出来弹框,来进行选择操作。通过stack组件可以实现子元素的固定定位和层叠,子元素依次入栈,后面的覆盖前面的。Flex容器的子组件排列方式可以从左到右,也可以从右到左,从上到下,从下到上。当warp是true的情况下,则是多行,涉及多行的对齐方式。

qq_36197716的博客 817

Windows10完美驱动Apple Studio Display:从雷电接口到亮度调节全攻略

本文详细介绍了如何在Windows10系统上完美驱动Apple Studio Display,涵盖雷电接口兼容性、亮度调节及色彩管理等关键问题。通过实测对比不同转接方案和显卡兼容性,推荐使用贝尔金VR线和NVIDIA GTX-1660显卡,并提供了BootCamp驱动安装和亮度调节的终极解决方案,帮助用户实现最佳显示效果。

elastic6hunter的博客 1121

HarmonyOS6.0开发之ArkUI & 鸿蒙布局:从“写注释”到“搭界面”,新手也能玩转APP界面设计

摘要:本文由资深程序员Feri分享鸿蒙开发中的ArkUI注释与基础布局技巧。文章将APP开发比作搭积木,ArkUI作为工具箱提供组件(积木)、布局(图纸)和注释(便利贴)。重点讲解三种注释写法(单行、多行、文档注释)和六种基础布局类型,特别是线性布局(Row/Column)的实战应用。通过"顶部导航栏"和"登录界面"两个实例,演示如何使用Row实现水平排列和Column实现垂直排列,并强调布局嵌套原则和开发技巧(设宽高、组件封装、先搭骨架)。适合新手快速掌握界面开发基

程序员Feri 1712

死磕GMSSL通信-java/Netty系列(二)

Netty-tcnative再linux编译比较好编译,但是再window编译,我尝试了各种办法,总是编译失败,所以我采用半自动的方式进行编译,Netty-tcnative会生成临时文件,直接用vs打开,设置openssl的头文件和静态库路径,然后生成静态库,静态库改个名字放到jar包里边,其实自动编译也是这个原理哈哈O(∩_∩)O。直接传输五个证书的路径吗,之前有的是说要转成x509之类的,转来转去的有点麻烦,这个是直接传输证书路径,由底层gmssl去解析,格式必须是pem格式。然而,若项目已依赖于。

qq_36577699的博客 3026

【HarmonyOS】ArkUI布局优化

在UI的开发中,我们通过布局组件和基础组件进行界面的描述,这种描述会被抽象成一个树结构,基础组件在其中是叶子节点,布局组件是中间节点,称之为应用组件树。当用户执行交互行为引发UI刷新时,本质上是通过触发这课组件树的重新渲染来实现应用界面更新的过程应用界面的更新主要分为数据处理和UI更新两个过程没有关联任何UI组件的状态变量不应该定义为状态变量,影响应用性能若要进行复杂的计算操作,建议通过中间变量进行计算,最后将结果一次性赋值给状态变量,不建议直接操作状态变量进行计算。

2302_79763237的博客 758

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程

本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。

ww90123的博客 653

企业级 Agent 在 K8s 上的运行模型

Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理)

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 1172

ArkUI揭秘:掌控子元素布局的魔法

在移动应用开发的广袤领域中,ArkUI 凭借其独特而强大的功能,为开发者们开启了一扇通往高效、精美界面构建的大门。通过深入探究 ArkUI 对子元素的约束以及布局位置的控制,我们清晰地认识到其在打造优质用户界面过程中所发挥的关键作用。对子元素的约束,如拉伸、缩放、占比和隐藏等功能,赋予了开发者精确掌控界面元素呈现的能力。拉伸约束让组件能够灵活适应容器尺寸的变化,确保布局在不同屏幕条件下都能保持合理与美观;缩放约束则巧妙地维持了组件的固定宽高比,有效避免了图像失真等问题,为用户呈现出始终如一的视觉效果;

大雨淅淅的博客 1336

记录汇川:自由口通信-梯形图

最常见的就是MODBUS通信协议,指令主要通过RS232和RS485端口进行报文发送,所以通信报文格式可以选择MODBUS RTU通信格式或MODBUS ASCII通信格式。255---Y10-Y17:ON(1111 1111)指令进行报文的发送与接收,但是报文内部的数据格式不是由主站PLC决定, 而是由。修改从站一个保持寄存器数据。修改从站多个保持寄存器数据。读取从站的输出信号状态。读取从站的输入信号状态。读取从站保持寄存器数据。读取从站输入寄存器数据。

m0_61837027的博客 4915
上一篇: 三、ArkUI界面设计2(基础布局)
下一篇: 一、HTML骨架、文本格式标签、img、src、a、ul ol、table、input、文本域textarea、复选框checkbox、单选框radio、button、布局标签(div、span)
bpmf_fff
博客等级 码龄6年 219粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值