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

布局

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:20
          left: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、换行 wrap
    
    Flex({
      // 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)
  }

}

运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端】深入浅出的React.js详解

React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并维护。随着 React 的不断演进,官方文档也在不断更新和完善。本文将详细解读最新的 React 官方文档,涵盖核心概念、新特性、最佳实践等内容,帮助开发者更好地理解…

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

Xcode 16 使用 pod 命令报错解决方案

原文请点击这个跳转 一、问题现象: 有人会遇到 Xcode 升级到 16 后,新建应用然后使用 pod init 命令会报错如下: Stack Ruby : ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-darwin23]RubyGems : 3.5.22Host : macOS 15.0 (24A335…

Linux 6.13 将提供对一系列 Pre-M1 苹果设备的基本支持

虽然不像苹果 M3/M4 设备支持上游主线 Linux 内核那样令人兴奋,但对于那些拥有一些较旧的苹果(M1 之前)设备的用户来说,即将发布的 Linux 6.13 内核将支持一些较旧的 SoC 和板卡。 即将到来的 Linux 6.13 合并窗口将支持大量旧版…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

vue elementui el-dropdown-item设置@click无效的解决方案

如图&#xff0c;直接在el-dropdown-item上面设置click&#xff0c;相应的method并没有被触发&#xff0c;查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…

flinkOnYarn并配置prometheus+grafana监控告警

flinkOnYarn并配置prometheusgrafana监控告警 一、相关服务版本&#xff1a; flink版本&#xff1a;1.17.2 pushgateway版本&#xff1a;1.10.0 prometheus版本&#xff1a;3.0.0 grafana-v11.3.0参考了网上的多个文档以及学习某硅谷的视频&#xff0c;总结了一下文档&#x…

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…

一文1800字使用Jmeter进行http接口性能测试!

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 为什么要做接口测试&#xff1f; 越底层发现b…

当使用key-value方式进行参数传递时,若key对应的是一个对象或数组结构,如何利用API Post工具进行模拟操作。

1. 后端服务代码如下 RequestMapping("/handle11")public Person handle11(Person person){System.out.println(person);return person;} 2. 后端入参结构 person是一个对象&#xff0c;对象结构如下&#xff1a; public class Person {private String username …

Pytorch学习--神经网络--完整的模型验证套路

一、选取的图片 全部代码依托于该博客 二、代码&#xff08;调用训练好的模型&#xff09; import torch import torchvision from PIL import Image from model import *img_path "dog.png" image Image.open(img_path)print(image.size)transform torchvisi…

PMP--一、二、三模--分类--变更

文章目录 技巧考试中的三大项目流程一 、变更流程 高频考点分析&#xff08;一、过程&#xff1b;二、人员&#xff09;一、过程&#xff1a;1.1 变更管理&#xff1a;1.1.1 瀑布型变更&#xff08;一次交付、尽量限制、确定性需求 &#xff1e;风险储备&#xff09;1.1.2 敏捷…

c语言选择排序

选择排序思想&#xff1a; 反复地从未排序部分选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放到已排序部分的末尾&#xff1b; 首先用一个变量min来保存数组第一个元素的下标&#xff0c;然后用这个下标访问这个元素&#xff0c;将这个元素与它后面的元素相…

基于SpringBoot的“原创歌曲分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“原创歌曲分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 平台功能结构图 平台首页界面图 用户注册界面…

JMeter项目实战

目录 一、流程&#xff1a; 1.接口测试流程&#xff1a; 2.测试数据准备&#xff1a; 3.接口功能测试&#xff1a; 4.自动化测试流程&#xff1a; 5.情景压力测试分析&#xff1a; 6.生成图形化测试报告&#xff1a; 一、流程&#xff1a; 1.接口测试流程&#xff1a; …

杨中科 .Net Core 笔记 DI 依赖注入2

ServiceCollection services new ServiceCollection();//定义一个承放服务的集合 services.AddScoped<iGetRole, GetRole>();using (ServiceProvider serviceProvider services.BuildServiceProvider()) {var list serviceProvider.GetServices(typeof(iGetRole));//获…

DAY6 线程

作业1&#xff1a; 多线程实现文件拷贝&#xff0c;线程1拷贝一半&#xff0c;线程2拷贝另一半&#xff0c;主线程回收子线程资源。 代码&#xff1a; #include <myhead.h> sem_t sem1; void *copy1()//子线程1函数 拷贝前一半内容 {int fd1open("./1.txt",O…

Window.history API学习笔记

Window.history API学习笔记 在现代前端开发中&#xff0c;单页应用&#xff08;SPA&#xff09;的流行让我们对于页面的浏览历史管理需求愈加明显。window.history API作为浏览器提供的原生API&#xff0c;能够帮助开发者更加细致地控制用户的导航体验。本文将介绍window.his…

Hbase集群搭建

1. 环境 三台节点hadoop 集群zookeeper 集群hbase 1.1环境准备 使用前文hdfs三台节点 1.11 zookeeper搭建 下载 wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz解压 tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz zookee…

物联网(RFID)全景:被装信息化监控应用与挑战

一、被装物联网信息化建设的动因 信息化改革在20世纪80年代中期启航&#xff0c;旨在提升被装保障的效率。随着时间的推移&#xff0c;硬件的广泛运用和软件的快速迭代&#xff0c;装备业务在规划、制造、分发以及战时支援等核心环节&#xff0c;已经与信息系统深度融合&#x…