鸿蒙-PC三栏布局

news/2024/9/17 19:04:15/ 标签: harmonyos, 鸿蒙

参考链接:

文档中心

// MainAbility.ts
import { window, display } from '@kit.ArkUI'
import { Ability } from '@kit.AbilityKit'

export default class MainAbility extends Ability {
  private windowObj?: window.Window
  private curBp?: string
  private myWidth?: number
  // ...
  // 根据当前窗口尺寸更新断点
  private updateBreakpoint(windowWidth:number) :void{
    // 将长度的单位由px换算为vp
    let windowWidthVp = windowWidth / (display.getDefaultDisplaySync().densityDPI / 160)
    let newBp: string = ''
    let newWd: number
    if (windowWidthVp < 320) {
      newBp = 'xs'
      newWd = 360
    } else if (windowWidthVp < 600) {
      newBp = 'sm'
      newWd = 360
    } else if (windowWidthVp < 840) {
      newBp = 'md'
      newWd = 600
    } else {
      newBp = 'lg'
      newWd = 600
    }
    if (this.curBp !== newBp) {
      this.curBp = newBp
      this.myWidth = newWd
      // 使用状态变量记录当前断点值
      AppStorage.setOrCreate('currentBreakpoint', this.curBp)
      // 使用状态变量记录当前minContentWidth值
      AppStorage.setOrCreate('myWidth', this.myWidth)
    }
  }

  onWindowStageCreate(windowStage: window.WindowStage) :void{
    windowStage.getMainWindow().then((windowObj) => {
      this.windowObj = windowObj
      // 获取应用启动时的窗口尺寸
      this.updateBreakpoint(windowObj.getWindowProperties().windowRect.width)
      // 注册回调函数,监听窗口尺寸变化
      windowObj.on('windowSizeChange', (windowSize)=>{
        this.updateBreakpoint(windowSize.width)
      })
    });
   // ...
  }
    
  // 窗口销毁时,取消窗口尺寸变化监听
  onWindowStageDestroy() :void {
    if (this.windowObj) {
      this.windowObj.off('windowSizeChange')
    }
  }
  //...
}

// tripleColumn.ets
@Component
struct Details {
  private imageSrc: Resource=$r('app.media.startIcon')
  build() {
    Column() {
      Image(this.imageSrc)
        .objectFit(ImageFit.Contain)
        .height(300)
        .width(300)
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
  }
}

@Component
struct Item {
  private imageSrc?: Resource
  private label?: string

  build() {
    NavRouter() {
      Text(this.label)
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .backgroundColor('#66000000')
        .textAlign(TextAlign.Center)
        .width('100%')
        .height('30%')
      NavDestination() {
        Details({imageSrc: this.imageSrc})
      }.title(this.label)
      .hideTitleBar(false)
      .backgroundColor('#FFFFFF')
    }
    .margin(10)
  }
}

@Entry
@Component
struct TripleColumnSample {
  @State arr: number[] = [1, 2, 3]
  @StorageProp('myWidth') myWidth: number = 360

  @Builder NavigationTitle() {
    Column() {
      Text('Sample')
        .fontColor('#000000')
        .fontSize(24)
        .width('100%')
        .height('100%')
        .align(Alignment.BottomStart)
        .margin({left:'5%'})
    }.alignItems(HorizontalAlign.Start)
  }

  build() {
    SideBarContainer() {
      Column() {
        List() {
          ForEach(this.arr, (item:number, index) => {
            ListItem() {
              Text('A'+item)
                .width('100%').height("20%").fontSize(24)
                .fontWeight(FontWeight.Bold)
                .textAlign(TextAlign.Center).backgroundColor('#66000000')
            }
          })
        }.divider({ strokeWidth: 5, color: '#F1F3F5' })
      }.width('100%')
      .height('100%')
      .justifyContent(FlexAlign.SpaceEvenly)
      .backgroundColor('#F1F3F5')

      Column() {
        Navigation() {
          List(){
            ListItem() {
              Column() {
                Item({ label: 'B1', imageSrc: $r('app.media.startIcon') })
                Item({ label: 'B2', imageSrc: $r('app.media.startIcon') })
              }
            }.width('100%')
          }
        }
        .mode(NavigationMode.Auto)
        .minContentWidth(360)
        .navBarWidth(240)
        .backgroundColor('#FFFFFF')
        .height('100%')
        .width('100%')
        .hideToolBar(true)
        .title(this.NavigationTitle)
      }.width('100%').height('100%')
    }.sideBarWidth(240)
    .minContentWidth(this.myWidth)
  }
}


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

相关文章

Python面试常见问题及详细解答:从基础到高级概念全覆盖

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 以下是Python面试中常见的一些问题及其详细答案的整理&#xff1a; 1. Python的可变与不可变对象 问题: 什么是可变对象和不可变对象&#xff1f;举例说明。答案: 可变对象: 可以在原地…

应用连接错误,初始化mysql数据库恢复---惜分飞

有人在部署一个新网站的时候,写错了配置信息,直接导致原有数据库被清掉,并创建了新库和写入了数据(其实本质就是drop table恢复) 登录操作系统查看,发现数据库文件在根分区,创建了新库,写入了数据之外,还有几个G的binlog.全部恢复不太可能,最后客户决定需要恢复的2个核心表数…

MySQL 元数据锁查询

为什么引入MDL锁 对于引入MDL&#xff0c;其主要解决了2个问题&#xff0c;一个是事务隔离问题&#xff0c;比如在可重复隔离级别下&#xff0c;会话A在2次查询期间&#xff0c;会话B对表结构做了修改&#xff0c;两次查询结果就会不一致&#xff0c;无法满足可重复读的要求&a…

SpringBoot打包部署,打包成jar和war有所不同?

1. 我的一个springboot项目&#xff0c;用mvn install打包成jar&#xff0c;换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行&#xff0c;没任何问题&#xff0c;为什么这里不需要tomcat也可以运行了&#xff1f; 2. 然后我打包成war放进tomcat运行&#xff0c;…

centos7 网卡配置文件

1、Centos6与Centos7网络命令对照表 2、网络配置文件解释说明 静态IP配置&#xff1a; cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPEEthernet BOOTPROTOstatic DEVICEeth0 NAMEeth0 ONBOOTyes IPADDR192.168.10.250 NETMASK255.255.255.0 GATEWAY192.168.10.1…

Redis——BigKey

1. MoreKey 当redis key的数量过多时&#xff0c;使用keys*会耗费大量时间和性能&#xff0c;因此在生产上需要禁用一些危险命令。 如何禁用命令 在 redis.conf 文件 SECURITY 板块中设置 rename-command 例如禁用keys&#xff0c;flushdb&#xff0c;flushall rename-comma…

卷积神经网络(Datawhale X 李宏毅苹果书AI夏令营)

卷积神经网络(Datawhale X 李宏毅苹果书AI夏令营) 卷积神经网络是一种非常典型的网络 架构&#xff0c;常用于图像分类等任务。 一张图像是一个三维的张量&#xff0c;其中一维代表图像的 宽&#xff0c;另外一维代表图像的高&#xff0c;还有一维代表图像的通道&#xff08;…

QtC++截图支持窗口获取

介绍 在截图工具中你会发现&#xff0c;接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素&#xff0c;那么今天简单分析一下QTc如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口…

springboot系列--自动配置原理

一、容器功能 一、组件添加功能 一、Configuration Configuration有两种模式&#xff0c;Full模式与Lite模式。 1、配置 类组件之间无依赖关系用Lite模式加速容器启动过程&#xff0c;减少判断 2、配置类组件之间有依赖关系&#xff0c;方法会被调用得到之前单实例组件&#…

HTML:从历史演进到未来创新的网页基石

该论文为AI生成&#xff0c;请勿运用到正式的论文上&#xff0c;以下仅供参考 一、引言 1.1 研究背景 HTML&#xff08;Hypertext Markup Language&#xff09;作为网页构建的基础语言&#xff0c;在互联网的发展历程中占据着至关重要的地位。自 1993 年诞生以来&#xff0c…

去中心化网络:Web3如何颠覆传统互联网

在互联网的演进过程中&#xff0c;从最初的静态网页到交互式的Web2.0&#xff0c;技术的进步不断推动着网络的变革。而如今&#xff0c;Web3作为互联网的下一代技术&#xff0c;正以其去中心化的特性&#xff0c;逐步颠覆传统的互联网架构。本文将深入探讨Web3如何通过去中心化…

PhotoZoom Classic 9.0.2中文版新功能介绍及PhotoZoom 9使用教程

PhotoZoom Classic 9.0.2中文版简介 PhotoZoom Classic 9.0.2中文版是一款新颖的、技术上具有革命性的对数码图片进行放大的工具。通常的工具对数码图片进行放大时&#xff0c;总会降低图片的品质&#xff0c;而这款软件使用了S-SPLINE技术(一种申请过专利的&#xff0c;拥有自…

[数据集][目标检测]西红柿成熟度检测数据集VOC+YOLO格式3241张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3241 标注数量(xml文件个数)&#xff1a;3241 标注数量(txt文件个数)&#xff1a;3241 标注…

江协科技stm32————11-4 SPI通信协议

目录 SPI外设简介 SPI框图 波特率控制 SPE&#xff08;SPI使能&#xff09; 配置主从模式 四种模式的选择 发送和接收数据缓冲区状态 I2C基本结构 1. SPI模式选择 2. 时钟极性和相位&#xff08;CPOL和CPHA&#xff09; 3. 波特率设置 4. 数据帧格式 5. NSS引脚管…

高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验

不管是菜鸟还是老鸟&#xff0c;游戏玩到某个阶段很容易出现瓶颈&#xff0c;在游戏的某个阶段&#xff0c;这里面制约最大的除了操作之外&#xff0c;实际上还是我们用的硬件。比如在PC游戏中&#xff0c;鼠标的影响就非常大&#xff0c;像是在游戏中如果鼠标延迟过高&#xf…

时空特征融合方向小论文创新点一次性都给你!看到就是赚到

朋友们&#xff0c;今天给大家推荐一个发小论文很不错的方向&#xff1a;时空特征融合。 时空特征融合是一种提高模型性能和准确性的关键技术&#xff0c;通过结合空间和时间维度的信息&#xff0c;它可以显著提高模型的预测精度和泛化能力&#xff0c;给我们提供更全面的数据…

Ansible Tower与AWX:构建可视化的运维自动化解决方案

Ansible Tower与AWX&#xff1a;构建可视化的运维自动化解决方案 引言 随着企业数字化转型的深入&#xff0c;运维自动化逐渐成为IT管理的重要组成部分。Ansible作为一种简单、灵活且功能强大的自动化工具&#xff0c;广泛应用于配置管理、应用部署和任务自动化中。然而&…

EvoSuite使用总结

1.安装EvoSuite插件 以IDEA为例&#xff0c;在Plugins栏搜索EvoSuite后点击install&#xff0c;安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生成成功可以看到如下提示&#xff1a; 注意事项&#xff1a; 生成路径&#xff1a;src/test/java 使用juni…

C语言野指针

什么是野指针 野指针&#xff08;Wild Pointer&#xff09;在C语言中指的是未初始化的指针&#xff0c;即它没有被显式地指向任何有效的内存地址。使用野指针可能会导致程序访问到非法或未知的内存区域&#xff0c;从而引发不可预测的行为和错误。 为了避免出现野指针问题&am…

【Linux 从基础到进阶】FTP/SFTP 服务器搭建与管理

FTP/SFTP 服务器搭建与管理 引言 文件传输协议(FTP)和安全文件传输协议(SFTP)是常用的文件传输工具。FTP 主要用于局域网内部或可信网络中,而 SFTP 则是基于 SSH 的加密文件传输协议,适合在不安全的网络环境中使用。本文将介绍如何在 CentOS 和 Ubuntu 上搭建和管理 FT…