鸿蒙OS开发:【一次开发,多端部署】(多设备自适应能力)实例

多设备自适应能力

介绍

此Demo展示在JS中的多设备自适应能力,包括资源限定词、原子布局和响应式布局。

效果预览

image.png

使用说明

1.本示例中的资源限定词和响应式布局针对常见设备类型做了适配,可以在预览器中开启"Multi-profile preview"进行多设备预览。

2.本示例中的原子布局提供了滑动条(slider),通过拖动滑动条更改父容器尺寸可以更直观的查看原子布局的效果。为了突出重点以及易于理解,此部分的代码做了一定精简,建议通过IDE预置的MatePadPro预览器查看此部分效果。

3.启动应用,首页展示了资源限定词原子布局响应式布局三个按钮。

4.点击资源限定词进入新界面,展示字符串和图片资源的使用。

5.点击原子布局进入新界面,分别展示原子布局的拉伸能力、缩放能力、隐藏能力、折行能力、均分能力、占比能力、延伸能力。

6.点击响应式布局进入新界面,展示媒体查询、栅格布局、典型场景三类响应式布局能力。

开发前请熟悉鸿蒙开发指导文档gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

相关概念

资源限定与访问:资源限定词可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括屏幕密度等维度,限定词之间通过中划线(-)连接,开发者在resources目录下创建限定词文件。
原子布局:在屏幕形态和规格不同等情况下,布局效果需要实现自适应,因此系统提供了面向不同屏幕尺寸界面自适应适配的布局能力,称为原子布局。
响应式布局:通过使用响应式布局能力开发新应用或者改造已有应用,可以使应用在手机、平板、智慧屏等各种尺寸的设备都有良好的展示效果。

工程目录

code/SuperFeature/MultiDeviceAppDev/JsAdaptiveCapabilities
└─src└─main├─js│  └─MainAbility│      ├─common                            //公共资源包│      ├─i18n                              //国际化语言包│      ├─pages│      │  ├─atomicLayoutCapability         //原子布局│      │  │  ├─equipartitionCapability     //均分能力│      │  │  ├─extensionCapability│      │  │  │  ├─extensionCapability1     //延伸能力1│      │  │  │  └─extensionCapability2     //延伸能力2│      │  │  ├─flexibleCapability         │      │  │  │  ├─flexibleCapability1      //拉伸能力1│      │  │  │  └─flexibleCapability2      //拉伸能力2│      │  │  ├─hiddenCapability            //隐藏能力│      │  │  ├─index                       //原子布局首页│      │  │  ├─proportionCapability        //均分能力│      │  │  ├─scaleCapability             //均分能力│      │  │  └─wrapCapability              //折行能力│      │  ├─index                          //主页│      │  └─resourceQualifier              //资源限定注入│      │      └─responsiveLayout           //响应式布局│      │          ├─gridContainer          //网格容器│      │          ├─index                  //响应布局首页│      │          ├─mediaQuery             //媒体查询│      │          └─typicalScene           //典型布局│      └─resources                         //限定词资源└─resources                                //公共资源     `HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿`

搜狗高速浏览器截图20240326151450.png

具体实现

1、index下定义三个box,分别资源限定词resourceQualifier、原子布局atomicLayoutCapability、响应式布局responsiveLayout,并通过onclick路由到各自的组件。
2、资源限定词组件: 在MainAbility.resource下定义需要访问的资源,在资源限定词resourceQualifier组件中,使用$r(‘’)即可实现不同形态和规格访问到不同的资源。
3、原子布局atomicLayoutCapability组件:该布局下,通过slide滑动控制样式的展示比率rate,例如下面这个样例,[源码参考]。

<!--Copyright (c) 2022 Huawei Device Co., Ltd.Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.--><element name="NavigationBar" src="common/components/navigationBar/navigationBar"></element><div class="container"><Navigationbar title="{{ title }}"></Navigationbar><div class="box" style="width : {{ rate }};"><div class="box-mid" style="width : {{ rate }};"><div for="list" class="box-small"><image src="common/image/icon.png"></image><text>App name</text></div></div></div><slider class="slider" min="40" max="75" value="{{ value }}" onchange="setValue"></slider></div>

4、响应式布局responsiveLayout :该布局下需要相对应的媒体资源,比如sm、md、lg,然后监听媒体的变化,从而对资源进行响应式的调整。 例如栅格布局,[源码参考]

<!--Copyright (c) 2022 Huawei Device Co., Ltd.Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.--><element name="NavigationBar" src="common/components/navigationBar/navigationBar"></element><div class="container"><Navigationbar title="{{ title }}"></Navigationbar><grid-container style="background-color : #F1F3F5; margin-top : 10vp;"><grid-row style="height : 200px; justify-content : space-around; width : 100%;"><grid-col xs="1" sm="1" md="1" lg="2" style="background-color : #66BBB2CB;"><div style="align-items : center; height : 100%;"><text>{{ $t("strings.left") }}</text></div></grid-col><grid-col xs="1" sm="2" md="5" lg="7" style="background-color : #66B6C5D1;"><div style="align-items : center; height : 100%;"><text>{{ $t("strings.center") }}</text></div></grid-col><grid-col xs="1" sm="1" md="2" lg="3" style="background-color : #66BBB2CB;"><div style="align-items : center; height : 100%;"><text>{{ $t("strings.right") }}</text></div></grid-col></grid-row></grid-container></div>

本案例定义了xs、sm、md、lg下的栅格宽度,根据系统的规格自动选择相应的属性。
5、使用mediaQuery对规格进行监听,判断当前系统的横竖屏,从而加载相应的资源,[源码参考]。

<!--Copyright (c) 2022 Huawei Device Co., Ltd.Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.--><element name="NavigationBar" src="common/components/navigationBar/navigationBar"></element><div class="container-big"><Navigationbar title="{{ title }}"></Navigationbar><div class="container1"><image if="{{ isLandscape }}" style="height : 100vp; width : 100vp" src="common/image/tablet.png"></image><image else style="height : 100vp; width : 100vp" src="common/image/phone.png"></image><text class="text" style="font-size : 24vp;">{{ text }}</text></div></div>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Day7:JAVA面向对象的初级使用】

目录 1、类和对象1.1 类的介绍1.2 类和对象的关系1.3 类的组成 2、对象内存图2.1 单个对象内存图2.2 两个对象内存图2.3 两个引用指向相同内存图 3、成员变量和局部变量3.1 成员变量和局部变量的区别 4、this关键字4.1 this可以解决的问题4.2 this介绍4.3 this内存图4.4 this总…

MapReduce基础实战

**MapReduce基础实战** 一、引言 随着大数据时代的到来&#xff0c;数据量的快速增长对数据处理能力提出了更高的要求。MapReduce作为一种分布式计算框架&#xff0c;以其高效、容错和易于编程的特点&#xff0c;成为了处理大规模数据集的重要工具。本文将介绍MapReduce的基本…

浏览器输入URL到网页显示之间发生了什么

记&#xff1a; DNS(Domain Name System,域名系统)就是根据域名来查找对应的IP地址的一个关键系统。 域名层级关系&#xff1a; 根域名服务器&#xff08;.&#xff09;顶级域名服务器&#xff08;.com&#xff09;权威域名服务器&#xff08;server.com&#xff09; 首先浏…

5.22R语言初步学习-2(使用包、绘图)

本文逻辑可能有些凌乱&#xff0c;是在数据处理的使用中学习R语言&#xff0c;所以用到的一些包、函数等都直接写在这了&#xff0c;主要就是处理数据的一个过程可能会用到的部分函数。 包的使用 R语言的使用&#xff0c;很大程度上是借助各种各样的R包的辅助&#xff0c;从某…

Python 之程序截图常见的几种方式

pywin32 PyQt5 需要先 pip 安装 pywin32、PyQt5 &#xff0c;相关依赖 pip 会自动安装。 pip install pywin32 pip install PyQt5 下面这种方式比较强悍&#xff0c;可以根据活跃窗口的 title 名称&#xff0c;自动找到对应的窗口然后进行截图。 import sysimport win32gu…

关于智慧校园安全用电监测系统的设计

人生人身安全是大家关注的话题&#xff0c;2019年12月中国消防统计近五年发生在全国学生宿舍的火灾2314起&#xff08;中国消防2019.12.应急管理部消防救援局官方微博&#xff09;&#xff0c;违规电器是引发火灾的主因。如果在各寝室安装智能用电监测器实时监督线路参数&#…

MVSnet 代码详解(pytorch)

大致过一下MVSnet 论文中核心的点对应代码应该怎么写。 forward 函数需要 照片&#xff0c;映射矩阵&#xff0c;以及深度值。 照片的shape是 &#xff08;1&#xff0c;5,3&#xff0c;1184,1600&#xff09;代表着1个batch,5张图片&#xff0c;然后一次是每张图片的channel和…

Android低代码开发 - MenuPanel的源码剖析和基本使用

看了我上篇文章Android低代码开发 - 像启蒙和乐高玩具一样的MenuPanel 之后&#xff0c;本篇开始讲解代码。 源代码剖析 首先从MenuPanelItemRoot讲起。 package dora.widget.panelinterface MenuPanelItemRoot {/*** 菜单的标题。** return*/var title: String?fun hasTit…

大象资讯:PostgreSQL 17 Beta 1 发布!

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ PostgreSQL 全球开发小组 发布于 2024-05-23 PostgreSQL 全球开发小组宣布&#xff0c;PostgreSQL 17 的第一个测试版本现已可供下载。此版本包含 PostgreSQL 17 正式发布时将提供的所有功能的预…

IEN在Web3.0中的性能与安全优势

随着Web3.0的快速发展&#xff0c;优化网络基础设施变得至关重要。智能生态网络&#xff08;Intelligent Ecological Network, IEN&#xff09;作为新一代网络架构&#xff0c;在提升性能与增强安全方面展现出巨大潜力。本文将深入探讨IEN在Web3.0中的技术优势&#xff0c;并展…

高效利用键盘上的 caps lock(大写键)实现中英切换

先看效果 在中文输入环境中&#xff0c;Caps Lock 键经常被忽视&#xff0c;占据了键盘上的黄金位置却很少派上用场。接下来&#xff0c;我将介绍如何将这个闲置的键合理利用&#xff0c;让它变得更加实用。 第一步 设置&#xff1a; 我以五笔为例&#xff1a; 1.输入法默认…

docker如何拉取redis最新镜像并运行

要拉取Docker Hub上最新版本的Redis镜像&#xff0c;您可以使用以下命令&#xff1a; docker pull redis:latest 这里的latest标签会自动获取Redis镜像的最新版本。如果您希望指定一个确切的版本号&#xff0c;可以直接使用该版本号替换latest。例如&#xff0c;要拉取Redis版…

高铁VR虚拟全景展示提升企业实力和形象

步入VR的神奇世界&#xff0c;感受前所未有的汽车展示体验。VR虚拟现实技术以其独特的沉浸式模拟&#xff0c;让你仿佛置身于真实展厅之中&#xff0c;尽情探索汽车的每一处细节。 一、定制化展示&#xff0c;随心所欲 VR汽车虚拟展厅打破空间束缚&#xff0c;让汽车制造商能够…

力扣1809 没有广告的剧集(postgresql)

需求 Table: Playback ----------------- | Column Name | Type | ----------------- | session_id | int | | customer_id | int | | start_time | int | | end_time | int | ----------------- 该表主键为&#xff1a;session_id &#xff08;剧集id&#xff09; customer_…

VUE3.0-列表渲染

我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法&#xff0c; 其中 items 是源数据的数组&#xff0c;而 item 是迭代项的别名 <template><h3>列表渲染</h3> <p v-for"item in names&quo…

调试时JSON库一直提示 PDB找不到 使用需要对象文件来进行调试的 /DEBUG:Fastlink生成的

最近调试时一直提示上面的提示框&#xff0c;很是烦躁。 为什么会出现这个错误呢&#xff0c;我一直使用的是/DEBUG。出现原因没有找出来&#xff0c;理论上市使用了/DEBUG:Fastlink这个模式才会出&#xff0c;但是就是一直在报这个错误。 /DEBUG&#xff08;生成调试信息&am…

同旺科技 FLUKE ADPT 隔离版发布 ---- 3

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B 总体连接&#xff1a; 连接线&#xff0c;根据自己实际需求而定&#xff1b; …

Flutter 中的 SnackBarAction 小部件:全面指南

Flutter 中的 SnackBarAction 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;SnackBar 是一种流行的用于提供轻量级反馈的方式&#xff0c;它可以在屏幕上短暂显示消息。SnackBarAction 则是与 SnackBar 结合使用的一种按钮组件&#xff0c;允许用户对显示的消息做出响…

数据结构--顺序表

1.顺序表的概念 1.1线性表 具有相同特性的数据元素的有限序列&#xff0c;再逻辑结构上呈现线性&#xff0c;但是在物理结构上不一定是线性&#xff08;也就是在内存中非线性&#xff09; 顺序表是线性表中的一种&#xff0c;他的底层逻辑就是数组&#xff0c;就是对数组的一…

flink程序本地运行:No ExecutorFactory found to execute the application

1.问题描述 在idea中运行flink job程序出现如下错误&#xff1a; Exception in thread "main" java.lang.IllegalStateException: No ExecutorFactory found to execute the application. at org.apache.flink.core.execution.DefaultExecutorServiceLoader.getE…