鸿蒙多功能工具箱开发实战(三十二)-多设备适配与响应式布局
鸿蒙多功能工具箱开发实战(三十二)-多设备适配与响应式布局前言HarmonyOS支持多种设备形态多设备适配是开发的重要环节。本文将讲解响应式布局和多设备适配策略。一、设备类型1.1 设备分类类型宽度范围典型设备小屏 600dp手机竖屏中屏600-840dp手机横屏、小平板大屏 840dp平板、折叠屏1.2 设备信息获取importdisplayfromohos.displayimportdeviceInfofromohos.deviceInfoexportclassDeviceUtil{/** * 获取设备类型 */staticgetDeviceType():phone|tablet|tv|wearable{consttypedeviceInfo.deviceTypeswitch(type){casephone:returnphonecasetablet:returntabletcasetv:returntvcasewearable:returnwearabledefault:returnphone}}/** * 获取屏幕宽度 */staticgetScreenWidth():number{constdisplayInfodisplay.getDefaultDisplaySync()returndisplayInfo.width}/** * 获取屏幕高度 */staticgetScreenHeight():number{constdisplayInfodisplay.getDefaultDisplaySync()returndisplayInfo.height}/** * 是否横屏 */staticisLandscape():boolean{returnthis.getScreenWidth()this.getScreenHeight()}/** * 是否大屏设备 */staticisLargeScreen():boolean{constwidthpx2vp(this.getScreenWidth())returnwidth600}}1.3 网络请求流程图服务器HTTP模块HttpUtil应用层服务器HTTP模块HttpUtil应用层发起请求构建请求参数调用request()发送HTTP请求返回响应数据响应结果解析响应返回数据二、响应式布局2.1 媒体查询importmediaQueryfromohos.mediaqueryexportclassMediaQueryUtil{privatestaticlistener:mediaQuery.MediaQueryListener/** * 监听屏幕变化 */staticlistenScreenChange(callback:(isLarge:boolean)void):void{constconditionmediaQuery.matchConditionSync(screen and (min-width: 600vp))this.listenermediaQuery.matchCondition(condition,(result:mediaQuery.MediaQueryResult){callback(result.matches)})}/** * 取消监听 */staticunlisten():void{if(this.listener){mediaQuery.unmatchCondition(this.listener)}}}2.2 响应式组件Componentexportstruct ResponsiveLayout{StateisLargeScreen:booleanfalseaboutToAppear(){this.isLargeScreenDeviceUtil.isLargeScreen()MediaQueryUtil.listenScreenChange((isLarge){this.isLargeScreenisLarge})}aboutToDisappear(){MediaQueryUtil.unlisten()}BuilderParamsmallContent:()voidBuilderParamlargeContent:()voidbuild(){if(this.isLargeScreen){this.largeContent()}else{this.smallContent()}}}2.3 使用示例EntryComponentstruct ResponsivePage{build(){ResponsiveLayout({smallContent:(){// 小屏布局单列Column(){this.ContentArea()}},largeContent:(){// 大屏布局双列Row(){this.SideBar()this.ContentArea()}}})}BuilderSideBar(){Column(){Text(侧边栏)}.width(240).backgroundColor(#F5F5F5)}BuilderContentArea(){Column(){Text(内容区域)}.layoutWeight(1)}}三、栅格布局3.1 栅格系统Componentexportstruct GridContainer{Propcolumns:number12Propgutter:number16BuilderParamcontent:()voidbuild(){Row(){this.content()}.width(100%)}}Componentexportstruct GridColumn{Propspan:number12// 占用列数Propoffset:number0// 偏移列数BuilderParamcontent:()voidbuild(){Column(){this.content()}.width(${(this.span/12)*100}%).margin({left:${(this.offset/12)*100}%})}}3.2 响应式栅格Componentexportstruct ResponsiveGrid{Statecolumns:number12StateisLargeScreen:booleanfalseaboutToAppear(){this.updateColumns()MediaQueryUtil.listenScreenChange((isLarge){this.isLargeScreenisLargethis.updateColumns()})}privateupdateColumns(){this.columnsthis.isLargeScreen?12:4}build(){Grid(){// 栅格内容}.columnsTemplate(repeat(${this.columns}, 1fr))}}四、多设备资源4.1 资源目录结构resources/ ├── base/ # 默认资源 │ ├── element/ │ │ └── string.json │ └── media/ │ └── icon.png ├── phone/ # 手机资源 │ └── media/ │ └── icon.png # 手机尺寸图标 └── tablet/ # 平板资源 └── media/ └── icon.png # 平板尺寸图标4.2 设备特定配置exportclassResourceUtil{/** * 获取设备特定资源 */staticgetDeviceResource(baseName:string):Resource{constdeviceTypeDeviceUtil.getDeviceType()// 根据设备类型返回不同资源switch(deviceType){casetablet:return$r(app.media.${baseName}_tablet)default:return$r(app.media.${baseName})}}/** * 获取尺寸相关值 */staticgetDimensionValue(config:{small:numbermedium:numberlarge:number}):number{constwidthpx2vp(DeviceUtil.getScreenWidth())if(width600)returnconfig.smallif(width840)returnconfig.mediumreturnconfig.large}}五、适配最佳实践5.1 弹性尺寸EntryComponentstruct AdaptivePage{build(){Column(){// 使用百分比宽度Row(){Column().width(30%).backgroundColor(#F5F5F5)Column().width(70%).backgroundColor(#FFFFFF)}.width(100%)// 使用layoutWeightRow(){Column().layoutWeight(1).backgroundColor(#F5F5F5)Column().layoutWeight(2).backgroundColor(#FFFFFF)}.width(100%)}}}5.2 字体适配exportclassFontSizeUtil{/** * 获取适配字体大小 */staticgetFontSize(baseSize:number):number{constdeviceTypeDeviceUtil.getDeviceType()switch(deviceType){casetablet:returnbaseSize*1.25casetv:returnbaseSize*1.5default:returnbaseSize}}}// 使用Text(标题).fontSize(FontSizeUtil.getFontSize(18))六、高级适配技巧6.1 设备适配流程图手机平板折叠屏获取设备信息判断设备类型设备类型应用手机布局应用平板布局应用折叠屏布局渲染UI6.2 自适应组件Componentstruct AdaptiveLayout{StatedeviceType:stringphoneaboutToAppear(){this.deviceTypeDeviceUtil.getDeviceType()}build(){if(this.deviceTypetablet){this.TabletLayout()}else{this.PhoneLayout()}}BuilderTabletLayout(){Row(){this.SidePanel()this.MainContent()}}BuilderPhoneLayout(){Column(){this.MainContent()}}}6.3 资源限定符resources/ base/ # 默认资源 phone/ # 手机资源 tablet/ # 平板资源 tv/ # TV资源 wearable/ # 可穿戴设备资源七、小结本文详细讲解了多设备适配✅ 设备类型判断✅ 媒体查询✅ 响应式布局✅ 栅格系统✅ 多设备资源✅ 自适应组件✅ 资源限定符系列文章导航下期预告鸿蒙多功能工具箱开发实战(三十三)-折叠屏适配

相关新闻

LeetCode 1037题解:向量叉乘法判断三点共线

LeetCode 1037题解:向量叉乘法判断三点共线

1. 题目解析与核心思路1.1 题目要求理解LeetCode 1037题要求判断给定的三个点是否能构成"有效的回旋镖"。根据几何学定义,三个点构成回旋镖的条件是它们不在同一条直线上。题目输入是三个二维坐标点,我们需要通过计算判断这三个点是否共线。题…

2026/7/27 7:58:40 阅读更多 →
AI Agent开发:从3000行到50行的架构思维转变

AI Agent开发:从3000行到50行的架构思维转变

1. 从3000行到50行:重新理解AI Agent的本质去年我经历了一次职业生涯中最有价值的挫败——耗时三个月开发的3000行"智能框架",被同事用50行代码彻底颠覆。这个戏剧性的对比让我重新思考AI Agent开发的本质。1.1 传统框架思维的陷阱我的初始方案…

2026/7/27 7:58:40 阅读更多 →
NVIDIA GPU保底方案:降低AI开发门槛的金融技术实践

NVIDIA GPU保底方案:降低AI开发门槛的金融技术实践

这次我们来看一个很有意思的话题:NVIDIA 的保底方案如何让 GPU 贷款变得可行。对于很多中小团队和个人开发者来说,GPU 资源一直是 AI 开发和模型训练的最大瓶颈,而传统的 GPU 租赁或购买方案往往门槛较高。NVIDIA 近期推出的保底方案&#xf…

2026/7/27 7:58:40 阅读更多 →

最新新闻

论文AI检测率过高?三步实战方案降低误判

论文AI检测率过高?三步实战方案降低误判

1. 论文AI检测率过高的现状与挑战 最近一年,学术圈突然掀起了一股"AI检测风暴"。我带的几个研究生经常半夜给我发消息:"老师,查重系统显示我的论文AI生成率超过50%怎么办?"、"明明是自己写的&#xff0c…

2026/7/27 8:07:47 阅读更多 →
Postgres 18 安装 Redhat 改变PGDATA systemctl

Postgres 18 安装 Redhat 改变PGDATA systemctl

查看service---- cd /usr/lib/systemd/system postgresql-18.service sudo yum install -y postgresql18-server postgresql18 --nogpgcheck Installed: postgresql18-18.4-2PGDG.rhel8.10.x86_64 postgresql18-libs-18.4-2PGDG.rhel8.10.x86_64 postgresql18-server-1…

2026/7/27 8:07:47 阅读更多 →
从零构建64位Linux Shellcode:深入理解系统调用与位置无关代码

从零构建64位Linux Shellcode:深入理解系统调用与位置无关代码

1. 项目概述:为什么我们要亲手“锻造”Shellcode?在网络安全领域,Shellcode这个词总是带着一丝神秘和危险的气息。它通常被看作是攻击者的“武器”,一段能够直接让目标机器执行我们指令的机器码。很多初学者,甚至一些从…

2026/7/27 8:07:47 阅读更多 →
Windows下curl证书验证失败:Schannel原理、排查与修复全指南

Windows下curl证书验证失败:Schannel原理、排查与修复全指南

1. 项目概述:当curl在Windows上“哑火”时如果你在Windows环境下用curl命令访问一个HTTPS网站,突然蹦出来一个“schannel: failed to verify certificate chain”或者“schannel: SEC_E_UNTRUSTED_ROOT”之类的错误,是不是瞬间感觉头大&#…

2026/7/27 8:07:47 阅读更多 →
混沌系统与秩交织结合的图像加密算法解析

混沌系统与秩交织结合的图像加密算法解析

1. 项目概述:混沌与秩交织的图像加密新思路最近在信息安全领域,基于混沌系统的图像加密算法越来越受到关注。不同于传统的AES、DES等对称加密算法,混沌加密利用非线性动力学系统对初始条件的极端敏感性,能够生成高度随机的密钥流&…

2026/7/27 8:07:47 阅读更多 →
目标检测开源方案选型:YOLO 系列到 DETR 的实际表现对比

目标检测开源方案选型:YOLO 系列到 DETR 的实际表现对比

目标检测开源方案选型:YOLO 系列到 DETR 的实际表现对比 一、目标检测的选型,从来不止是看 mAP 做目标检测项目时,论文里的 mAP 数字总是很好看。但实际部署后,YOLOv8 在 Jetson Orin 上的推理延迟从宣称的 12ms 变成了 47ms。DET…

2026/7/27 8:06:47 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻