[ArkUI开发技巧] 应用的全屏式沉浸适配

引言

在开发应用的过程中,为了使用户聚焦在应用本身,最好对应用进行沉浸适配。先前有一种适配方法,将SystemBarProperties设置成应用页面顶部和底部的颜色,但是这种方法在切换页面的过程中过渡十分僵硬,且应用在小窗模式下切换页面会强制全屏,因此不太尽如人意。本文将介绍一种优化过的方法,实现应用的沉浸适配。

原理

通过将应用样式设置为全屏,将SystemBarProperties背景设置为透明,contentColor随页面变化实现沉浸效果

代码实现

  • 页面的代码调整

为实现沉浸后,应用内容不入侵状态栏,需要给状态栏预留空间。因此,需要将页面最外层且设置了颜色的容器组件的padding.top设置为原有值+36(具体值随不同设备类型可能有变化,但36为phone形态设备的建议值)

@Entry
@Component
struct Page {build() {Column() {Text("Hello World!")}.padding({top: 36}).backgroundColor(Color.White)}
}
额外建议

考虑到用户不一定使用手势导航,底部TabBar最好也预留空间

  • Utils的编写

为了简化代码,提高复用率,我们应该编写一个沉浸Utils类来控制,代码如下:

// This file is part of libNMC, which is the foundation of ohos-weather.
// Copyright (C) 2023  Tingjin<dev@peercat.cn>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
import window from '@ohos.window';export class ImmersiveUtils {public static immersive(windowStage: window.WindowStage, config: {barColor: string,contentColor: string,navigationColor: string,navigatorColor: string}) {windowStage.getMainWindow().then(win => {win.setWindowSystemBarProperties({statusBarColor: config.barColor,statusBarContentColor: config.contentColor,navigationBarColor: config.navigationColor,navigationBarContentColor: config.navigatorColor});})}
}

代码来自于我的开源项目ohos-weather

config包含了SystemBarProperties属性信息,用本方法时,一般将barColor和navigationColor设置为#00ffffff,即透明,根据应用背景色来调整contentColor和navigatorColor

  • EntryAbility的修改

在EntryAbility的onWindowStageCreate回调中,我们需要添加

globalThis.windowStage = windowStage;
windowStage.getMainWindow().then(win => {win.setWindowLayoutFullScreen(true);})
  • 实现沉浸

最后即可实现沉浸,在页面onPageShow生命周期回调中,使用如下代码实现沉浸

ImmersiveUtils.immersive(globalThis.windowStage, StyleConstant.IMMERSIVE_CONFIG.INDEX);

其中第二个参数应根据你应用的实际情况进行修改,在ohos-weather中,StyleConstant.IMMERSIVE_CONFIG.INDEX的内容如下

INDEX: {barColor: "#00286098",contentColor: "#ffffff",navigationColor: "#005d99d6",navigatorColor: "#ffffff"}

随着鸿蒙生态的发展,鸿蒙开发已成为时代新风口,学习鸿蒙开发势在必行

为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

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

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

相关文章

MySql01:初识

1.mysql数据库2.配置环境变量3. 列的类型和属性&#xff0c;索引&#xff0c;注释3.1 类型3.2 属性3.3 主键(主键索引)3.4 注释 4.结构化查询语句分类&#xff1a;5.列类型--表列类型设置 1.mysql数据库 数据库&#xff1a; ​ 数据仓库&#xff0c;存储数据&#xff0c;以前我…

linux(ubuntu)中drontab定时器命令详解

linux&#xff08;ubuntu&#xff09;中drontab定时器命令详解 crontab 是一个用于创建、编辑和管理用户的定时任务的命令&#xff0c;它可以让用户在指定的时间自动执行指定的命令或脚本。 基本语法 -e&#xff1a;编辑用户的 crontab 文件&#xff1b;-l&#xff1a;列出用…

抖店如何绑定官方账号?实操详解!

我是电商珠珠 都说抖店在开通之后&#xff0c;需要用抖音号去与店铺进行绑定&#xff0c;在绑定官方账号后&#xff0c;就可以为店铺带来更多的曝光&#xff0c;还能免费开通商品橱窗&#xff0c;认证蓝V。 但是有很多人并不了解怎么做&#xff0c;接下来我就来给大家讲讲绑定…

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作&#xff0c;推出基于 AI 的角色引擎和 Copilot 助理&#xff0c;旨在提升游戏中 NPC 的交互力和生命力&#xff0c;提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC&#xff0c;通过生成式 AI 驱动 NPC 行为&#xff0c;使其动态响应玩家操作…

软件测试|MySQL SHOW DATABASES详解

简介 在MySQL中&#xff0c;SHOW DATABASES是一条SQL语句&#xff0c;用于显示当前MySQL服务器上所有可用的数据库。这条简单而常用的命令可以让你快速查看服务器上的数据库列表。本文将详细介绍SHOW DATABASES的使用方法以及相关注意事项。 语法 在 MySQL 中&#xff0c;可…

java---变量

变量 什么是变量 在Java中&#xff0c;变量是用于存储数据的一种容器。它可以是不同的数据类型&#xff0c;并且可以在程序执行过程中被赋予不同的值。在Java中&#xff0c;变量需要先声明后使用&#xff0c;并且可以被重新赋值。声明一个变量的语法为&#xff1a;数据类型 变量…

typora 序列号(不使用也可以激活)

解决一下typora不使用序列号也能激活问题。 1.找到typora的安装目录 右击typora图标&#xff0c;点击属性即可看到 2.按照 Typora路径到 —> resources —> page-dist —> static —> js 这个路径找到这两个文件 LicenseIndex.180dd4c7.xxxxxxx.chunk.js License…

详细分析高频的TCP知识点总结

TCP 作为传输层的协议&#xff0c;了解它&#xff0c;拿下它&#xff0c;是一个网络工程师素养的体现&#xff0c;也是面试中经常被问到的知识点。 我们账号之前的文章里也写过不少关于TCP相关的文章&#xff0c;感兴趣的朋友们可以点击下方搜索框进行搜索。 今天&#xff0c…

HuiYong.Online 私有化博客系统

HuiYong.Online 私有化博客系统 一站式支持MarkDown、Drawio、XMind 免费、简单、强大... 用思维导图、流程图、写文章、做笔记、记录生活;搭建自己 / 组织 / 公司的知识储备系统;这里就是你所寻找的。 官网 https://huiyong.online 初心 很喜欢写博客&#xff0c;可以静…

Python从入门到精通 第十一章(面向对象)

一、类和对象 1、面向对象基本概念 &#xff08;1&#xff09;之前学习的编程方式是面向过程的&#xff0c;面向过程和面向对象是两种不同的编程方式。 &#xff08;2&#xff09;过程和函数&#xff1a;过程是早期的一个编程概念&#xff0c;过程类似于函数&#xff0c;只能…

Python办公自动化 – 操作SQLite数据库和数据迁移

Python办公自动化 – 操作SQLite数据库和数据迁移 以下是往期的文章目录&#xff0c;需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化 –…

国外高校对于ChatGPT的三种态度及正确使用方法

ChatGPT无疑是23年留学届的热门话题&#xff0c;也成为了不少留学生再也离不开的万能工具&#xff0c;从总结文献、润色论文、给教授写email似乎无所不能。 各大高校对于学生使用ChatGPT的态度也有所不同。例如&#xff0c;哈佛大学教育代理院长 Anne Harrington 在内部邮件中…