鸿蒙-全屏播放页面(使用相对布局)---持续更新中
最终实现效果图:

实现步骤
创建FullScreenPlay.ets全品播放页面
并将其修改为启动页面。


全屏播放,屏幕必然横过来,所以要将窗口横过来。


编辑
src/main/ets/entryability/EntryAbility.ets
若写在/EntryAbility.ets中,则所有窗口都是横屏,因此不应该写在UIAbility中,应该写在全屏播放的页面中。是个跳转。
当页面即将显示时,设置窗口显示方向为“横屏”。


编辑
这两个方法都可以,这两个方法有什么区别?
abouttoappear是所有组件都可以使用的方法,页面组件可以、局部组件也可以。
onPageShow()页面组件才有,其他组件没有。
abouttoappear先一步调用,页面即将显示时调用,不会有渐变的过程,onpageshow页面显示出来时候才调用,会有渐变的过程。
旋转动画应该放在onpageshow中。


编辑
全屏播放页面应用
如果放在onPageShow()中,会看到竖屏转换为横屏的效果。
如果放在aboutToAppear()中,一上来就会显示横屏,用户不会看到竖屏转换为横屏的效果。
我们这里使用aboutToAppear()
设置全屏
async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
}

横屏显示
竖屏(肖像画):window.Orientation.PORTRAIT,
横屏(风景画):window.Orientation.LANDSCAPE
async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
}

考虑到性能,使用相对布局容器
背景色撑满整个屏幕


微调元素边距的三种方式
.margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素
.offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素
.position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素
静态页面实现
1、顶部条 和 暂停
import { window } from '@kit.ArkUI';@Entry@Componentstruct FullScreenPlay {// 当页面即将显示时,设置窗口显示方向为“横屏”。async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.LANDSCAPE) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE}build() {RelativeContainer() {// 1、最底部的视频Row(){}.width('100%').height('100%').backgroundColor('#AAA')// 2、顶部的 后退按钮+标题+更多Row(){// 后退按钮Image('/images/back.svg').width(9).height(15).fillColor('#fff')// 标题Text('Axure RP9教程:手把手教你制作交互案例').fontSize(16).fontColor('#FCFCFC').layoutWeight(1) // 权重 1 表示占据剩余空间.margin({left:20})// 更多Image('/images/more.svg').width(24).fillColor('#fff')}.width('100%')// .backgroundColor('#110').padding({left:20 , right:20, top:20})// 3、播放/暂停按钮Image('/images/play2.svg').width(50).height(50).alignRules({middle: {anchor:'__container__', align: HorizontalAlign.Center},center: {anchor:'__container__', align: VerticalAlign.Center}})// 4、底部的播放控制条}.height('100%').width('100%').backgroundColor('#fdd')}}

2、底部进度条
// 4、底部的播放控制条
Row() {Text("03:23").fontSize(12).fontColor("#FFFFFF")Progress({value: 3.23 * 60,total: 5.31 * 60,type: ProgressType.Linear}).layoutWeight(1).margin({ left: 8, right: 15 }).backgroundColor('#fff').color('#f59a23')Text("05:31").fontSize(12).fontColor("#FFFFFF")Text("标清").fontSize(12).fontColor("#FFFFFF").margin({ left: 15, right: 15 })Image('/images/zoomin.svg').width(15).height(15)
}
.width('100%')// .backgroundColor(Color.Pink).alignRules({bottom: { anchor: '__container__', align: VerticalAlign.Bottom },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).padding({ bottom: 20, left: 30, right: 30 })

完整代码:
import { window } from '@kit.ArkUI';@Entry@Componentstruct FullScreenPlay {// 当页面即将显示时,设置窗口显示方向为“横屏”。async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.LANDSCAPE) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE}build() {RelativeContainer() {// 1、最底部的视频Row() {}.width('100%').height('100%').backgroundColor('#7f7f7f')// 2、顶部的 后退按钮+标题+更多Row() {// 后退按钮Image('/images/back.svg').width(9).height(15).fillColor('#fff')// 标题Text('Axure RP9教程:手把手教你制作交互案例').fontSize(16).fontColor('#FCFCFC').layoutWeight(1)// 权重 1 表示占据剩余空间.margin({ left: 20 })// 更多Image('/images/more.svg').width(24).fillColor('#fff')}.width('100%')// .backgroundColor('#110').padding({ left: 20, right: 20, top: 20 })// 3、播放/暂停按钮Image('/images/play2.svg').width(50).height(50).alignRules({middle: { anchor: '__container__', align: HorizontalAlign.Center },center: { anchor: '__container__', align: VerticalAlign.Center }})// 4、底部的播放控制条Row() {Text("03:23").fontSize(12).fontColor("#FFFFFF")Progress({value: 3.23 * 60,total: 5.31 * 60,type: ProgressType.Linear}).layoutWeight(1).margin({ left: 8, right: 15 }).backgroundColor('#fff').color('#f59a23')Text("05:31").fontSize(12).fontColor("#FFFFFF")Text("标清").fontSize(12).fontColor("#FFFFFF").margin({ left: 15, right: 15 })Image('/images/zoomin.svg').width(15).height(15)}.width('100%')// .backgroundColor(Color.Pink).alignRules({bottom: { anchor: '__container__', align: VerticalAlign.Bottom },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).padding({ bottom: 20, left: 30, right: 30 })}.height('100%').width('100%').backgroundColor('#fdd')}}
3、添加进度条上的小圆饼



解决方法:
要调整小圆饼的位置:
微调小圆饼的位置-三种方法
- .margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素 (会影响周围元素,不合适)
- .offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素()

- .position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素()



// 小圆饼
Row(){
}
.width(20).height(20).borderRadius(10).backgroundColor('#fff')// .offset({x:-60,y:0}).position({x: '60%',y: -8})

创建项目》创建FullScreenPlay.ets全品播放页面,并将其修改为启动页面。


全屏播放,屏幕必然横过来,所以要将窗口横过来。


编辑
src/main/ets/entryability/EntryAbility.ets
若写在/EntryAbility.ets中,则所有窗口都是横屏,因此不应该写在UIAbility中,应该写在全屏播放的页面中。是个跳转。
当页面即将显示时,设置窗口显示方向为“横屏”。


编辑
这两个方法都可以,这两个方法有什么区别?
abouttoappear是所有组件都可以使用的方法,页面组件可以、局部组件也可以。
onPageShow()页面组件才有,其他组件没有。
abouttoappear先一步调用,页面即将显示时调用,不会有渐变的过程,onpageshow页面显示出来时候才调用,会有渐变的过程。
旋转动画应该放在onpageshow中。


编辑
全屏播放页面应用
如果放在onPageShow()中,会看到竖屏转换为横屏的效果。
如果放在aboutToAppear()中,一上来就会显示横屏,用户不会看到竖屏转换为横屏的效果。
我们这里使用aboutToAppear()
设置全屏
async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
}

横屏显示
竖屏(肖像画):window.Orientation.PORTRAIT,
横屏(风景画):window.Orientation.LANDSCAPE
async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.PORTRAIT) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE
}

考虑到性能,使用相对布局容器
撑满整个屏幕


微调边距的元素
.margin({left: 50}) // 设置外边距,微调元素位置1 影响周围的兄弟元素
.offset({x:50, y:50}) // 设置偏移量,微调元素位置2 不会影响周围的兄弟元素
.position({x:1000, y:50}) // 设置位置,微调元素位置3 会影响周围的兄弟的元素
静态页面实现
顶部条 和 暂停
import { window } from '@kit.ArkUI';@Entry@Componentstruct FullScreenPlay {// 当页面即将显示时,设置窗口显示方向为“横屏”。async aboutToAppear(): Promise<void> {// 得到窗口对象, 并设置窗口显示方向为“横屏”。let w = await window.getLastWindow(getContext()) // 获取最后一个窗口(最近显示的窗口对象)w.setWindowLayoutFullScreen(true) // 设置窗口全屏// 设置窗口显示方向为“横屏”。w.setPreferredOrientation(window.Orientation.LANDSCAPE) // 竖屏(肖像画):window.Orientation.PORTRAIT, 横屏(风景画):window.Orientation.LANDSCAPE}build() {RelativeContainer() {// 1、最底部的视频Row(){}.width('100%').height('100%').backgroundColor('#AAA')// 2、顶部的 后退按钮+标题+更多Row(){// 后退按钮Image('/images/back.svg').width(9).height(15).fillColor('#fff')// 标题Text('Axure RP9教程:手把手教你制作交互案例').fontSize(16).fontColor('#FCFCFC').layoutWeight(1) // 权重 1 表示占据剩余空间.margin({left:20})// 更多Image('/images/more.svg').width(24).fillColor('#fff')}.width('100%')// .backgroundColor('#110').padding({left:20 , right:20, top:20})// 3、播放/暂停按钮Image('/images/play2.svg').width(50).height(50).alignRules({middle: {anchor:'__container__', align: HorizontalAlign.Center},center: {anchor:'__container__', align: VerticalAlign.Center}})// 4、底部的播放控制条}.height('100%').width('100%').backgroundColor('#fdd')}}

底部进度条
// 4、底部的播放控制条
Row() {Text("03:23").fontSize(12).fontColor("#FFFFFF")Progress({value: 3.23 * 60,total: 5.31 * 60,type: ProgressType.Linear}).layoutWeight(1).margin({ left: 8, right: 15 }).backgroundColor('#fff').color('#f59a23')Text("05:31").fontSize(12).fontColor("#FFFFFF")Text("标清").fontSize(12).fontColor("#FFFFFF").margin({ left: 15, right: 15 })Image('/images/zoomin.svg').width(15).height(15)
}
.width('100%')
// .backgroundColor(Color.Pink)
.alignRules({bottom: { anchor: '__container__', align: VerticalAlign.Bottom },middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.padding({ bottom: 20, left: 30, right: 30 })

相关文章:
鸿蒙-全屏播放页面(使用相对布局)---持续更新中
最终实现效果图: 实现步骤 创建FullScreenPlay.ets全品播放页面 并将其修改为启动页面。 全屏播放,屏幕必然横过来,所以要将窗口横过来。 编辑 src/main/ets/entryability/EntryAbility.ets 若写在/EntryAbility.ets中,则所有…...
全面讲解python的uiautomation包
在常规的模拟鼠标和键盘操作,我们一般使用pyautogui,uiautomation模块不仅能直接支持这些操作,还能通过控件定位方式直接定位到目标控件的位置,而不需要自己去获取对应坐标位置。uiautomation模块不仅支持任意坐标位置截图&#x…...
CentOS 7 源码安装libjsoncpp-1.9.5库
安装依赖工具 sudo yum install cmake make gcc cmake 需要升级至 3.8.0 以上可参考:CentOS安装CMakegcc 需要升级至9.0 以上可参考:CentOS 7升级gcc版本 下载源码 wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.…...
备赛蓝桥杯之第十六届模拟赛第1期职业院校组第五题:回忆画廊
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
闭包、装饰器学习笔记(第二次学习)
以下是整理后的笔记格式: --- # 闭包与装饰器 ## 一、闭包的概念,作用,条件### 作用: 1. **保存外部函数的变量**:可以让一个变量常驻于内存。 python def func():a 10def inner():print(a)return areturn inne…...
Windows下docker使用教程
docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的,后面的内容其实不变 …...
Java项目生成接口文档的方案
文章目录 问题:Java项目生成接口文档的方案方案一:Swagger3.0方案二:Apipost两者对比 问题:Java项目生成接口文档的方案 需求 1、需要生成生成时间,作者名称,项目名称,接口名称,请…...
Android第七次面试总结(Java和kotlin源码级区别 )
Java 和 Kotlin 作为用于软件开发尤其是 Android 和后端开发的编程语言,在源码层面存在诸多区别,下面从多个方面进行深入讲解: 1. 基础语法与变量声明 变量声明方式 Java:变量声明时必须明确指定数据类型,并且若要声…...
北斗导航 | 改进奇偶矢量法的接收机自主完好性监测算法原理,公式,应用,RAIM算法研究综述,matlab代码
改进奇偶矢量法的接收机自主完好性监测算法研究 摘要 接收机自主完好性监测(RAIM)是保障全球导航卫星系统(GNSS)安全性的核心技术。针对传统奇偶矢量法在噪声敏感性、多故障隔离能力上的缺陷,本文提出一种基于加权奇偶空间与动态阈值的改进算法。通过引入观测值权重矩阵重…...
案例实践 | 招商局集团以长安链构建“基于DID的航运贸易数据资产目录链”
概览 案例名称 基于DID的航运贸易数据资产目录链 业主单位 招商局集团 上线时间 2024年10月 用户群体 供数用数企业和个人 用户规模 集团内20企业 案例背景 招商局集团深入落实“促进数据高效流通使用、赋能实体经济”精神,深化集团数字化水平,…...
【C++】httplib:轻量级的 HTTP 服务器和客户端
本教程采用渐进式讲解方式,适用于 MinGW 环境。我们将从 httplib 的基本概念入手,通过一个小型 Demo 展示其核心用法,最后深入探讨高级功能与实际应用场景。 1. 简介 1.1 httplib 基本概念 httplib 是一个轻量级的 C HTTP 库,设…...
【算法工程】RAG:针对linux下文档解析出现乱码问题的解决
RAG服务中,非常关键的模块是文档解析。但将解析服务部署到linux平台,解析word、ppt等文档时可能就会出现乱码,核心原因是系统未能识别出对应的字体。因为word、ppt在windows下是最适配的,如果将解析服务部署到linux上,…...
亚马逊云科技全面托管DeepSeek-R1模型现已上线
文章目录 亚马逊云科技全面托管DeepSeek-R1模型现已上线在Amazon Bedrock中开始使用DeepSeek-R1模型DeepSeek-R1现已可用 亚马逊云科技全面托管DeepSeek-R1模型现已上线 亚马逊云科技提供众多免费云产品,可以访问:亚马逊云科技 截至1月30日,D…...
2025年移动端开发性能优化实践与趋势分析
启动速度优化 本质:缩短首次可见帧渲染时间。 方法: iOS:利用Core ML本地模型轻量化部署,减少云端等待。Android:强制启用SplashScreen API,通过setKeepOnScreenCondition控制动画时长。冷启动需将耗时操…...
Docker Compose介绍
基本概念 Docker-Compose是Docker官方的开源项目,负责实现对docker容器集群的快速编排。 可以这么理解,docker compose是docker提出的一个工具软件,可以管理多个docker容器组成一个应用,只需要编写一个YAML格式的配置文件docker…...
openGauss关联列数据类型不一致引起谓词传递失败
今天分享一个比较有意思的案例 注意:因为原始SQL很长,为了方便排版,简化了SQL 下面SQL跑60秒才出结果,客户请求优化 select dtcs.owner, dtcs.table_name, dtcs.column_name, dct.commentsfrom dba_tab_columns dtcsleft outer j…...
头歌实践教学平台--【数据库概论】--SQL
一、表结构与完整性约束的修改(ALTER) 1.修改表名 USE TestDb1; alter table your_table rename TO my_table; 2.添加与删除字段 #语句1:删除表orderDetail中的列orderDate alter table orderDetail drop orderDate; #语句2:添加列unitPrice alter t…...
Unity 全栈开发商业级 MMORPG 大型网游:源码与课件助力进阶之路
Unity 全栈开发商业级 MMORPG 大型网游:源码与课件助力进阶之路 在竞争激烈的游戏市场中,大型多人在线角色扮演游戏(MMORPG)凭借其丰富的世界观、庞大的玩家社区以及持续的内容更新,始终占据着重要地位。Unity 作为一…...
软件工程面试题(六)
1、forward及redirect 的区别?有哪些方式实现 <jsp:forward>重定向后url地址栏地址不变还是原来的地址;而response.sendRedirect()重定向后url地址栏地址显示的请求后的新地址。<jsp:forward>重定向的时候可以保存回话信息,因此可以使用re…...
Apache Dubbo 与 ZooKeeper 集成:服务注册与发现的全解析
在分布式系统中,Apache Dubbo 作为一个高性能的 RPC 和微服务框架,广泛用于服务治理,而 ZooKeeper 作为其常用注册中心,提供了服务注册与发现的核心能力。在2025年的技术生态中,理解 Dubbo 与 ZooKeeper 的集成原理和使…...
算法基础——模拟
目录 1 多项式输出 2.蛇形方阵 3.字符串的展开 模拟,顾名思义,就是题⽬让你做什么你就做什么,考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单,属于竞赛⾥⾯的签到题(但是,万事⽆绝对ÿ…...
【第30节】MFC编程:ListCtrl控件和TreeCtrl控件
目录 引言 一、高级控件ListCtrl 二、高级控件TreeCtrl 三、Shell控件 四、CImageList 五、综合代码示例 引言 在MFC编程里,高级控件能大幅提升应用程序的交互性与功能性。接下来,咱们会详细讲讲ListCtrl和TreeCtrl这两个高级控件。不仅会介绍它们…...
kotlin知识体系(四) : inline、noinline、crossinline 关键字对应编译后的代码是怎样的 ?
1. inline、noinline、crossinline 的作用 在 Kotlin 里,inline、noinline 和 crossinline 这几个关键字和高阶函数紧密相关,它们能够对高阶函数的行为进行优化和控制。本文接下来会详细介绍它们的作用和原理。 1.1 inline 关键字 inline 关键字用于修…...
JavaScript 手写 call、apply、bind 和 new
1. 手写 call 方法 核心思路:改变函数的 this 指向并立即执行,通过将函数临时挂载到目标对象上调用。 Function.prototype.myCall function (context, ...args) {// 如果 context 为 null 或 undefined,则默认为 windowcontext context |…...
睡眠健康领域的智能硬件设备未来的发展趋势
随着社会节奏的不断加快,人们的睡眠问题愈发多了起来,主要表现有以下几个方面: 睡眠质量下降 浅睡眠增多:现代生活中,人们面临着各种压力源,如工作压力、生活琐事、经济压力等,这些压力会导致大…...
计算机网络基础:量子通信技术在网络中的应用前景
计算机网络基础:量子通信技术在网络中的应用前景 一、前言二、量子通信技术基础2.1 量子通信的基本概念2.2 量子通信的主要原理2.2.1 量子密钥分发(QKD)原理2.2.2 量子隐形传态原理三、量子通信技术的特点3.1 绝对安全性3.2 超高通信速率潜力3.3 抗干扰能力强四、量子通信技…...
Postman 下载文件指南:如何请求 Excel/PDF 文件?
在 Postman 中进行 Excel/PDF 文件的请求下载和导出,以下是简明的步骤,帮助你轻松完成任务。首先,我们将从新建接口开始,逐步引导你完成整个过程。 Postman 请求下载/导出 excel/pdf 文件教程...
Stereolabs ZED Box Mini:机器人与自动化领域的人工智能视觉新选择
在人工智能视觉技术快速发展的今天,其应用场景正在持续拓宽,从智能安防到工业自动化,从机器人技术到智能交通,各领域都在积极探索如何利用这一先进技术。而 Stereolabs 推出的ZED Box Mini,正是一款专为满足这些多样化…...
arm之s3c2440的I2C的用法
基础概念 IC(Inter-Integrated Circuit)又称I2C,是是IICBus简称,所以中文应该叫集成电路总线。 IIC的总线的使用场景,所有挂载在IIC总线上的设备都有两根信号线,一根是数据线SDA,另一 根是时钟…...
安装node,配置npm, yarn, pnpm, bun
文章目录 安装node, 配置 npm, yarn, pnpm, bun配置node配置 npm, yarn, pnpm, bunnpmyarnpnpmbun 安装node, 配置 npm, yarn, pnpm, bun 配置node 输入网址:Node.js,包含各种安装方式以及多版本管理方式。也可以直接下载安装包。 安装包的安装过程…...
