UI(三)布局

文章目录

          • 1、Colum和Row——垂直方向容器和水平方向容器
          • 2、ColumnSplit和RowSplit——子组件之间插入一条分割线
          • 3、Flex——弹性布局子组件的容器
          • 4、Grid和GridItem——网格容器和网格容器单元格
          • 5、GridRow和GridCol——栅格容器组件和栅格子组件
          • 6、List、ListItem、ListItemGroup——列表 、列表单条、列表item分组
          • 7、AlphabetIndexer——与容器组件联动进行快速定位
          • 8、Badge——信息标记的气泡
          • 9、Counter——计算器组件

1、Colum和Row——垂直方向容器和水平方向容器
space子组件水平或者垂直方向的间距
alignItem水平或者垂直方向的对齐
justifyContent水平或者垂直方向的对齐
//水平设置组件的间距为30
Row({space:30}){   //sapce表示元素间的间距
  Row().width('30%').height(50).backgroundColor(Color.Yellow)
  Row().width('30%').height(50).backgroundColor(Color.Blue)
}.width('100%').height('10%').border({width:1,color:Color.Red})

//设置子元素垂直方向的对齐方式
Row(){
  Row().width('30%').height(50).backgroundColor(Color.Green)
  Row().width('40%').height(50).backgroundColor(Color.Pink)
}.width('100%').height('10%').alignItems(VerticalAlign.Bottom).border({width:1,color:Color.Black})

//设置谁品方向的对齐
Row(){
  Row().width('30%').height(50).backgroundColor(Color.Pink)
  Row().width('30%').height(50).backgroundColor(Color.Brown)
}.width('100%').height('10%').justifyContent(FlexAlign.Start).border({width:1,color:Color.Red})

image.png

2、ColumnSplit和RowSplit——子组件之间插入一条分割线

ColumnSplit 横向分割线 rowSplit纵向分割线

RowSplit(){
  Text('沉舟侧畔千帆过').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
  Text('病树前头万木春').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
  Text('今日听君歌一曲').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
  Text('暂凭杯酒长精神').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
}
.resizeable(true)
.width('90%')
.height(400)

image.png

3、Flex——弹性布局子组件的容器
direction子组件在Flex容器上排列的方向,即主轴方向
wrapFlex容易以单行单列,还是多行多列
justifyContent子组件在Flex容器主轴上的对齐格式
alignItems子组件在Flex容器交叉轴上的对齐格式
alignContent交叉轴中有额外的空间时,多行内容的对齐方式,仅在wrap为wrap或者wrapReverse时生效
Flex({direction:FlexDirection.Row,wrap:FlexWrap.Wrap,alignContent:FlexAlign.Center}){
  Text('沉舟侧畔千帆过').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
  Text('病树前头万木春').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
  Text('今日听君歌一曲').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})
  Text('暂凭杯酒长精神').width('10%').height(400).backgroundColor(Color.Red).fontColor(Color.White).padding({left:8,right:8})

}
.height(400)
.width('100%')
.backgroundColor(Color.Pink)

image.png

4、Grid和GridItem——网格容器和网格容器单元格
 Grid(){
        ForEach(this.numsArr,(index:string) => {
            GridItem(){
              Text(index)
                .fontSize(20)
                .backgroundColor(Color.Pink)
                .width('100%')
                .height('100%')
                .textAlign(TextAlign.Center)
            }
        },index => index)
      }

      /**
       * columnsTemplate 用来设置当前网格布局列的数量 ,不设置时默认为1列
       * ‘1fr 1fr 1fr 2fr’ 表示将父组件分为4列,前三分各占1列,第四份占两列
       */
      .columnsTemplate('1fr 1fr 1fr 1fr 2fr')  // 设置当前网格布局列的数量
      .rowsTemplate('1fr 1fr 1fr 1fr 1fr')  // 设置网格布局行的数量
      .columnsGap(10)
      .rowsGap(20)
      .width('90%')
      .backgroundColor(Color.Yellow)
      .height(300)

image.png

5、GridRow和GridCol——栅格容器组件和栅格子组件

GridRow栅格容器组件 仅可以和栅格子组件GridCol在栅格布局场景中使用


private colorArr: Color[] = [Color.Red,Color.Blue,Color.Brown,Color.Green,Color.Orange,Color.Pink,Color.Grey];

GridRow({
  columns:5,   //设置布局列数
  gutter:{x:5,y:20}, //栅格布局间距,X代表水平方向 Y代表垂直方向
  breakpoints:{value:['400vp','600vp','800vp'], //断点发生变化时触发回调
  reference:BreakpointsReference.WindowSize},
  direction:GridRowDirection.RowReverse  // 栅格布局排列方向
}){
  ForEach(this.colorArr,(color) => {
    GridCol({span:{xs:1,sm:2,md:3,lg:4}}){
      Row().width('100%').height('80vp')
    }.borderColor(color).borderWidth(2).backgroundColor(color)
  })
}.width('100%').height('100%')

image.png

6、List、ListItem、ListItemGroup——列表 、列表单条、列表item分组

List可以包含ListItem和ListItemGroup子组件,ListItem用来展示列表具体Item,必须配合List来使用,ListItemGroup组件用来展示列表item分组,宽度默认充满List组件,必须配合List组件来使用。


private classListData: any = [{
    title:'周一',
    projects:['语文','数学','音乐']
  },{
    title:'周二',
    projects:['化学','政治','地理']
  },{
    title:'周三',
    projects:['体育','计算机','数学']
  },{
    title:'周四',
    projects:['音乐','美术','历史']
  }]


List({space:2}){
  ForEach(this.classListData,(item) => {
    ListItemGroup(){
      ForEach(item.projects,(projects) => {
        ListItem(){
          Text(projects)
            .width('100%')
            .height(30)
            .fontSize(20)
            .textAlign(TextAlign.Center)
        }
      }, item => item)
    }
    .borderRadius(2)
    .divider({strokeWidth:2,color:Color.Blue})  //ListItemGroup分割线
  })
}
.divider({strokeWidth:5,color:Color.Red}) //List分割线
.width('100%')

image.png

7、AlphabetIndexer——与容器组件联动进行快速定位

AlphabetIndexer是可以与容器组件联动用于按逻辑结构快速定位容器显示区域的组件。

private alphabetIndexerArrayA: string[] = ['安']
private alphabetIndexerArrayB: string[] = ['卜', '白', '包', '毕', '丙']
private alphabetIndexerArrayC: string[] = ['曹', '成', '陈', '催']
private alphabetIndexerArrayL: string[] = ['刘', '李', '楼', '梁', '雷', '吕', '柳', '卢']
private alphabetIndexerArrayValue: string[] = ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
  'H', 'I', 'J', 'K', 'L', 'M', 'N',
  'O', 'P', 'Q', 'R', 'S', 'T', 'U',
  'V', 'W', 'X', 'Y', 'Z']

  
      Row(){
        List({space:10,initialIndex:0}){
          ForEach(this.alphabetIndexerArrayA,(item) => {
            ListItem(){
              Text(item)
                .width('100%')
                .height('5%')
                .fontSize(20)
                .textAlign(TextAlign.Center)
            }
          },item => item)


          ForEach(this.alphabetIndexerArrayB,(item) => {
            ListItem(){
              Text(item)
                .width('100%')
                .height('5%')
                .fontSize(20)
                .textAlign(TextAlign.Center)
            }
          },item => item)



          ForEach(this.alphabetIndexerArrayC,(item) => {
            ListItem(){
              Text(item)
                .width('100%')
                .height('5%')
                .fontSize(20)
                .textAlign(TextAlign.Center)
            }
          },item => item)


          ForEach(this.alphabetIndexerArrayL,(item) => {
            ListItem(){
              Text(item)
                .width('100%')
                .height('5%')
                .fontSize(20)
                .textAlign(TextAlign.Center)
            }
          },item => item)
        }
        .width('50%')
        .height('100%')

        AlphabetIndexer({arrayValue:this.alphabetIndexerArrayValue,selected:0})
          .selectedColor(Color.Red)   //选中框文本颜色
          .popupColor(Color.Blue)   // 弹出框文本颜色
          .selectedBackgroundColor(Color.Yellow)  //选中框北京颜色
          .popupBackground(Color.Green) //弹出框背景颜色
          .usingPopup(true)   //是否使用弹出框
          .selectedFont({size:16,weight:FontWeight.Bolder}) //选中字体设置
          .popupFont({size:30,weight:FontWeight.Bold}) // 弹出字体设置
          .itemSize(28)
          .alignStyle(IndexerAlign.Left)   //弹出框在索引条左侧弹出
          .onRequestPopupData((index:number) => {
            if(this.alphabetIndexerArrayValue[index] == 'A'){
              return this.alphabetIndexerArrayA
            }else if(this.alphabetIndexerArrayValue[index] == 'B'){
              return this.alphabetIndexerArrayB
            }else if(this.alphabetIndexerArrayValue[index] == 'C'){
              return this.alphabetIndexerArrayC
            }else if(this.alphabetIndexerArrayValue[index] == 'L'){
              return this.alphabetIndexerArrayL
            }else {
              return []
            }
          })
      }
      .width('100%')
      .height('100%')

格式工厂 屏幕录像20240627_171006 00_00_02-00_00_15.gif

8、Badge——信息标记的气泡

Badge是可以附加在单个组件上用于信息标记的容器组件
构造函数主要有四个参数

count设置提示消息数
position设置提示点的位置(RightTop,Right,Left)
maxCount最大消息数,超过最大消息数则显示最大消息数
style样式,支持文本颜色和尺寸以及圆点颜色和尺寸
Badge({
  value:'5',
  style:{badgeSize:16,badgeColor:Color.Red}
}){
  Image($r('app.media.icon'))
    .width(60)
    .height(60)
}

Badge({
  value:'new',
  position:BadgePosition.Left,
  style:{badgeColor:Color.Blue,badgeSize:20}
}){
  Text('消息数量')
    .fontSize(20)
    .width(160)
    .height(40)
}
.width(160)
.height(40)

image.png

9、Counter——计算器组件

counter是计数器组件,提供相应的增加或者减少的计数操作

Counter(){
  Text(this.countNum.toString())
}
.margin(20)
.onInc(() => {   //监听数值增加事件
  this.countNum++
  
})
.onDec(() => {  //监听数值减小事件
  this.countNum--
})

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

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

相关文章

Visual Studio 工具使用 之 即时窗口

即时窗口:是Visual Studio中的一个调试工具,它允许开发人员在调试过程中执行代码并查看结果。开发人员可以在即时窗口中输入和执行表达式、调用方法,并查看变量的值。即时窗口通常用于调试过程中的快速测试和验证代码的正确性。 就是下面的这…

<电力行业> - 《第6课:电力企业》

1 电力行业 电力是个庞大的行业,企业众多,这里重点介绍下行业的巨头。 2 输配电企业(电网) 老百姓最熟悉的电力企业,两大电网公司:国家电网、南方电网,行业内最大的甲方。 3 电力基础设施建…

数据结构与算法笔记:高级篇 - B+树:MySql数据库索引是如何实现的?

概述 作为一名软件开发工程师,你对数据库肯定再熟悉不过了。MySQL 作为主流的数据库存储系统,它在我们的业务开发中,有着举足轻重的地位。在工作中,为了加速数据库中数据的查找速度,我们常用的处理思路是,…

【PromptCC】遥感图像变化字幕的解耦范式

摘要 以往的方法忽略了任务的显著特异性:对于不变和变化的图像对,RSICC难度是不同的,以一种耦合的方式处理未变化和变化的图像对,这通常会导致变化字幕的混淆。论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp…

深入理解RLHF技术

在《LLM对齐“3H原则”》这篇文章中,我们介绍了LLM与人类对齐的“3H”原则,但是这些对齐标准主要是基于人类认知进行设计的,具有一定的主观性。因此,直接通过优化目标来建模这些对齐标准较为困难。本文将介绍基于人类反馈的强化学…

高考填报志愿,要做到知己知彼兼顾平衡

寒窗苦读,无非就是希望能够考上一所理想的大学,不过自从高考改革以后,高考结束后只是第一阶段,接下来第二阶段应对高考填报志愿也同样重要。 如何选择合适的院校、专业,考生和家长都需要做好充足的准备,在收…

零拷贝技术(zero copy),DMA,mmap,sendfile

在一些高性能的IO场景下我们经常能听到零拷贝技术,这是个不错的话题。 零拷贝指的是内核态与用户态之间的数据拷贝,而这两个区域的数据拷贝只能依靠CPU,但是CPU最重要的作用应该是运算。 一、DMA的由来 在没有DMA之前,磁盘的IO…

武汉星起航:欧洲市场巨擘,亚马逊欧洲站重塑全球电商格局

在全球电商的浩瀚星海中,亚马逊欧洲站如一颗耀眼星辰,其卓越服务、海量用户群及尖端的物流网络熠熠生辉。在英国、德国、法国、意大利和西班牙这五大欧洲经济强国中,亚马逊凭借其无与伦比的市场领导力和消费者信任,稳固地占据了电…

个人网站搭建-步骤(持续更新)

域名申请 域名备案 域名解析 服务器购买 端口转发 Nginx要在Linux上配置Nginx进行接口转发,您可以按照以下步骤进行操作: 安装Nginx(如果尚未安装): 使用包管理工具(如apt, yum, dnf, 或zypper&#x…

PLC数据采集案例

--------天津三石峰科技案例分享 项目介绍 项目背景 本项目为天津某钢铁集团下数字化改造项目,主要解决天津大型钢厂加氢站数字化改造过程中遇到的数据采集需求。项目难点PLC已经在运行了,需要采集里面数据,不修改程序,不影响P…

C++编程(五)单例模式 友元

文章目录 一、单例模式(一)概念(二)实现方式1. 饿汉式2. 懒汉式 二、友元(一)概念(二)友元函数1.概念2.语法格式3. 使用示例访问静态成员变量访问非静态成员变量 (三&…

Vue3.3 的 defineOptions 的使用,方便在 setup 语法糖中为组件命名和控制父子属性透传,包含在线运行实例欧

defineOptions 是 Vue3.3 的新的宏&#xff0c;可以通过 defineOptions 宏在 <script setup> 中使用选项式 API&#xff0c;也就是说可以在一个宏函数中设置 name, props, emits, render, 控制是否允许父子非 props 的属性透传等功能。 defineOptions 可以直接在 setup …

uni-app picker多列选项

预期实现的效果&#xff1a; 选中后的效果&#xff1a; // Dom部分 <template><picker mode"multiSelector" :range"ssqRange" range-key"name" columnchange"ssqColumnChange" change"ssqChange" class"p…

【ajax实战05】文章封面发布

一&#xff1a;实现效果 二&#xff1a;实现步骤 1 准备标签结构和样式 html结构样式 <div class"cover"><label for"img">封面&#xff1a;</label><label for"img" class"place"></label><inpu…

如何精准分析人形机器人运动数据?

全球“机器换人”进程加速,人形机器人有望成为AI下一个重要落地应用场景;EtherCAT-Analyzer具备分析人形机器人所有关节和电池与主站的通讯信息,快速掌握节点网络状态! 前言 随着人形机器人行业的发展及《中国制造2025》的全面实施,传统的脉冲模式控制很大程度上制约了机…

当了面试官才知道:做好这3点,面试成功率至少提高50%

关于辉哥&#xff1a; 资深IT从业者&#xff0c; 曾就职于阿里、腾讯、美团、中信科等互联网公司和央企&#xff1b; 两岁小男孩的父亲。 不定期分享职场 | 婚姻 | 育儿 | 个人成长心得体会 关注我&#xff0c;一起学习和成长。 最近作为公司社招面…

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include"CommunityToolkit.Mvvm" Version"8.2.2" /><PackageReference Include"Microsoft.Extensions.Hosting" Version"8.0.0" /><PackageReference Include&q…

必应bing搜索广告投放介绍,投放的广告形式和效果

必应Bing搜索广告以其独特的市场定位、高质量的用户群体和强大的全球覆盖能力&#xff0c;成为众多企业拓展业务、提升品牌影响力的重要渠道。作为微软旗下的一款搜索引擎&#xff0c;必应不仅在美国市场占据重要份额&#xff0c;其在全球范围内的影响力也不容小觑。对于寻求国…

MySQL 基础概念

MySQL逻辑架构 MySQL 服务器逻辑架构图 最上层的服务并不是MySQL所独有的&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构&#xff0c;比如连接管理、授权认证、安全等等。 大多数MySQL的核心服务都在第二层&#xff0c;包括查询解析、分析、优化、…

【JavaEE进阶】Spring AOP使用篇

目录 1.AOP概述 2.SpringAOP快速入门 2.1 引入AOP依赖 2.2 编写AOP程序 3. Spring AOP详解 3.1 Spring AOP 核心概念 3.1.1切点(Pointcut) 3.1.2 连接点 (Join Point) 3.1.3 通知(Advice) 3.1.4 切面(Aspect) 3.2 通知类型 3.3PointCut 3.4 切面优先级 3.5 切点表…