当前位置: 首页 > news >正文

ArtTS系统能力-窗口管理的学习(3.2)

上篇回顾: ArtTS系统能力-通知的学习(3.1)

本篇内容: ArtTS系统能力-窗口管理的学习(3.2)

一、 知识储备

1. 基本概念

  • 窗口渲染式能力:指对状态栏、导航栏等系统窗口进行控制,减少状态栏、导航栏等系统界面的突兀感,从而使用户获得更好的体验。
    渲染式能力只在应用主窗口作为全屏窗口时生效,通常情况下,应用子窗口(弹窗、悬浮窗口等辅助窗口)无法使用沉浸式能力
  • 悬浮窗:全局悬浮窗口是一种特殊的应用窗口,具备在应用主窗口和对应Ability退到后台后,仍然可以在前台显示的能力。
    悬浮窗口可以用于应用退到后台后,使用小窗继续播放视频、或者为特定的应用创建悬浮球等快速入口。应用在创建悬浮窗口前,需要申请对应的权限(ohos.permission.SYSTEM_FLOAT_WINDOW)。

2.使用场景

  • 设置应用主窗口属性及目标页面
    在Stage模型下,应用主窗口由UIAbility创建并维护其生命周期。在UIAbility的onWindowStageCreate回调中,获取WindowStage,即可对其进行属性设置,也可以在应用配置文件中设置应用主窗口的属性。
createMainWindow(windowStage: window.WindowStage) {//第一步:获取应用主窗口let windowClazz = null;windowStage.getMainWindow((err, data) => {if (err) {console.error('该设备不支持')return;}windowClazz = data;//第二步:设置主窗口属性let isTouchable = true;windowClazz.setWindowTouchable(isTouchable, (err) => {if (err) {console.error('不支持触摸')return;}})//第三步:为主窗口加载对应的目标页面windowStage.loadContent("pages/StudyWidget", err => {if (err.code) {console.error('响应失败')return;}})})}
  • 设置应用子窗口属性及目标页面
createSubWindow(windowStage: window.WindowStage) {windowStage.createSubWindow('mySubWindow', (err, data) => { //1. 获取创建子窗口if (err) {console.error('不支持子窗口')return;}windowClazz = data;})windowClazz.moveWindowTo(300, 300, err => { //2. 设置子窗口属性if (err) {console.error('不支持子窗口移动')return;}})windowClazz.resize(500, 500, err => { //3. 修改子窗口属性if (err.code) {console.error('不支持子窗口改变尺寸')}})windowClazz.setUIContent('pages/StudyLayout', err => { //4. 加载对应的目标页面if (err.code) {console.error('子窗口加载页面失败')return;}windowClazz.showWindow(err => {if (err.code) {console.error('子窗口页面显示失败')return;}})})}destroySubWindow() {windowClazz.destroyWindow(err => {if (err.code) {console.error('子窗口销毁失败')return;}})}
  • 体验窗口沉浸式能力
setupWindow(windowStage: window.WindowStage) {let windowClazz = null;windowStage.getMainWindow((err, data) => {if (err.code) {console.error(`${JSON.stringify(err)}`)return;}windowClazz = data;let names = [];windowClazz.setWindowSystemBarEnable(names, err => {if (err.code) {console.error(`${JSON.stringify(err)}`)return;}})})windowStage.loadContent('pages/StudyWidget', err => {if (err.code) {console.error(`${JSON.stringify(err)}`)return;}})}
  • 设置悬浮窗口
addFloatWindow(windowStage: window.WindowStage) {let windowClazz = null;let config = {name: 'floatWindow', windowType: window.WindowType.TYPE_FLOAT, ctx: this.context};window.createWindow(config, (err, data) => {if (err.code) {console.error(`不支持:${JSON.stringify(err)}`)return;}windowClazz = data;windowClazz.moveWindowTo(300,300,err=>{if (err.code) {console.error(JSON.stringify(err))return;}})windowClazz.resize(500,500,err =>{if (err.code) {console.error(JSON.stringify(err))return;}})windowClazz.setUIContent("pages/StudyWidget",err=>{if (err.code) {console.error(JSON.stringify(err))return;}windowClazz.showWindow(err=>{if (err.code) {console.error(JSON.stringify(err));return;}})})})}

二、 效果一览

三、源码剖析

import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';
import thermal from '@ohos.thermal';let windowClazz = null;export default class EntryAbility extends UIAbility {onCreate(want, launchParam) {hilog.info(0x0000, 'testTag', '%{public}s', '我被创建了');globalThis.initTitle = '我是测试标题'}onDestroy() {hilog.info(0x0000, 'testTag', '%{public}s', '我被销毁了');}/*****************在这里定义LocalStorage*****************/args: Record<string, Object> = {'height': 111, 'age': 10, 'name': '小明', sex: '未知'};storage: LocalStorage = new LocalStorage(this.args)onWindowStageCreate(windowStage: window.WindowStage) {hilog.info(0x0000, 'testTag', '%{public}s', '系统接管创建');// windowStage.loadContent('pages/event/EventStudy', this.storage) //把localStorage实例传递过去windowStage.loadContent('pages/manager/NotificationIndex', this.storage) //把localStorage实例传递过去// this.createMainWindow(windowStage)// this.createSubWindow(windowStage)// this.setupWindow(windowStage)this.addFloatWindow(windowStage)}/*****************在这里定义LocalStorage*****************/onWindowStageDestroy() {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', '系统接管销毁');this.destroySubWindow();}onForeground() {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', '我要可见了');}onBackground() {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', '我不可见了');}createSubWindow(windowStage: window.WindowStage) {windowStage.createSubWindow('mySubWindow', (err, data) => { //1. 获取创建子窗口if (err) {console.error('不支持子窗口')return;}windowClazz = data;})windowClazz.moveWindowTo(300, 300, err => { //2. 设置子窗口属性if (err) {console.error('不支持子窗口移动')return;}})windowClazz.resize(500, 500, err => { //3. 修改子窗口属性if (err.code) {console.error('不支持子窗口改变尺寸')}})windowClazz.setUIContent('pages/StudyLayout', err => { //4. 加载对应的目标页面if (err.code) {console.error('子窗口加载页面失败')return;}windowClazz.showWindow(err => {if (err.code) {console.error('子窗口页面显示失败')return;}})})}destroySubWindow() {windowClazz.destroyWindow(err => {if (err.code) {console.error('子窗口销毁失败')return;}})}addFloatWindow(windowStage: window.WindowStage) {let windowClazz = null;let config = {name: 'floatWindow', windowType: window.WindowType.TYPE_FLOAT, ctx: this.context};window.createWindow(config, (err, data) => {if (err.code) {console.error(`不支持:${JSON.stringify(err)}`)return;}windowClazz = data;windowClazz.moveWindowTo(300,300,err=>{if (err.code) {console.error(JSON.stringify(err))return;}})windowClazz.resize(500,500,err =>{if (err.code) {console.error(JSON.stringify(err))return;}})windowClazz.setUIContent("pages/StudyWidget",err=>{if (err.code) {console.error(JSON.stringify(err))return;}windowClazz.showWindow(err=>{if (err.code) {console.error(JSON.stringify(err));return;}})})})}setupWindow(windowStage: window.WindowStage) {let windowClazz = null;windowStage.getMainWindow((err, data) => {if (err.code) {console.error(`${JSON.stringify(err)}`)return;}windowClazz = data;let names = [];windowClazz.setWindowSystemBarEnable(names, err => {if (err.code) {console.error(`${JSON.stringify(err)}`)return;}})})windowStage.loadContent('pages/StudyWidget', err => {if (err.code) {console.error(`${JSON.stringify(err)}`)return;}})}createMainWindow(windowStage: window.WindowStage) {//第一步:获取应用主窗口let windowClazz = null;windowStage.getMainWindow((err, data) => {if (err) {console.error('该设备不支持')return;}windowClazz = data;//第二步:设置主窗口属性let isTouchable = true;windowClazz.setWindowTouchable(isTouchable, (err) => {if (err) {console.error('不支持触摸')return;}})//第三步:为主窗口加载对应的目标页面windowStage.loadContent("pages/StudyWidget", err => {if (err.code) {console.error('响应失败')return;}})})}
}

相关文章:

ArtTS系统能力-窗口管理的学习(3.2)

上篇回顾&#xff1a; ArtTS系统能力-通知的学习&#xff08;3.1&#xff09; 本篇内容&#xff1a; ArtTS系统能力-窗口管理的学习&#xff08;3.2&#xff09; 一、 知识储备 1. 基本概念 窗口渲染式能力&#xff1a;指对状态栏、导航栏等系统窗口进行控制&#xff0c;减…...

C++ 运算符的优先级和关联性表

C 运算符的优先级和关联性表 1. Precedence and associativity (优先级和结合性)2. Alternative spellings (替代拼写)3. C operator precedence and associativity table (C 运算符的优先级和关联性表)References C documentation (C 文档) https://learn.microsoft.com/en-us…...

正则表达式替换字符串的方法

正则表达式替换字符串的方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨一个非常实用的编程技术&#xff1a;使用正则表达式替换字符串。正则…...

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…...

2024/7/4总结

http协议 http协议,是一个客户端请求和响应的标准协议&#xff0c;这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址和端口号之后就可以从服务器上取得所需要的网页信息。 通信规则规定了客户端发送给服务器的内容格式&#xff0c;也规定了服务器发送给…...

【Android面试八股文】Looper如何在子线程中创建?

文章目录 一、Looper的几个重要方法二、子线程中使用Looper的方式1三、子线程中使用Looper的方式23.1 使用HandlerThread实现3.2 HandlerThread源码解析创建子线程的 Looper必须要通过 Looper.prepare()初始化looper,然后再通过 Looper.loop()方法让 Loop运行起来。 那么具…...

IT项目管理文档体系

IT项目管理文档体系是确保项目顺利进行、有效沟通和合规性的关键组成部分。一个完善的文档体系能够帮助项目团队记录决策过程、明确职责、跟踪进度、管理变更并提供审计痕迹。 项目启动文档&#xff1a; 项目章程&#xff1a;正式授权项目启动&#xff0c;定义项目目标、范围、…...

ELK企业内部日志分析系统(1)

ELKKafkaFilebeat企业内部日志分析系统(1) Elasticsearch集群部署 1.部署环境 IP地址主机名配置系统版本192.168.222.129es12核4GRockyLinux192.168.222.130es22核3GRockyLinux192.168.222.131es32核3GRockyLinux 2.配置主机名解析和主机名 #关闭防火墙与selinux #更改主机…...

反序列化POP链技术详解

POP&#xff08; Procedure Oriented Programming &#xff09;链是反序列化安全问题中相对比较重要的技术点&#xff0c;相比于其他的反序列化问题&#xff0c;这种漏洞的产生更加难以发现&#xff0c;以及在利用上也比较复杂。 要掌握这个东西首先要先了解面向对象中的几个特…...

process.env.VUE_APP_BASE_API

前端&#xff1a;process.env.VUE_APP_BASE_API 在Vue.js项目中&#xff0c;特别是使用Vue CLI进行配置的项目&#xff0c;process.env.VUE_APP_BASE_API 是一个环境变量的引用。Vue CLI允许开发者在不同环境下配置不同的环境变量&#xff0c;这对于管理API基础路径、切换开发…...

面试题--SpirngCloud

SpringCloud 有哪些核心组件?(必会)  Eureka: 注册中心, 服务注册和发现  Ribbon: 负载均衡, 实现服务调用的负载均衡  Hystrix: 熔断器  Feign: 远程调用  Zuul: 网关  Spring Cloud Config: 配置中心 (1)Eureka 提供服务注册和发现, 是注册中心. 有两个组…...

中位数贪心,3086. 拾起 K 个 1 需要的最少行动次数

一、题目 1、题目描述 给你一个下标从 0 开始的二进制数组 nums&#xff0c;其长度为 n &#xff1b;另给你一个 正整数 k 以及一个 非负整数 maxChanges 。 Alice 在玩一个游戏&#xff0c;游戏的目标是让 Alice 使用 最少 数量的 行动 次数从 nums 中拾起 k 个 1 。游戏开始…...

xml_woarchive undefined symbol

最近在linux中编译一个自己写的老代码。是个C动态库。可以编译成功&#xff0c;但直到运行的时候才报 boost xml_woarchive undefined symbol. 解决的方法是在编译时要加上 wserialization 库。 注意&#xff0c;这个库有含 w 和不含 w 两个。在我这里需要使用含 w 的。 如果…...

SiCat:一款多功能漏洞利用管理与搜索工具

关于SiCat SiCat是一款多功能漏洞利用管理与搜索工具&#xff0c;该工具基于纯Python 3开发&#xff0c;旨在帮助广大研究人员有效地识别和收集来自开源和本地存储库的漏洞信息。 SiCat专注于网络安全管理方面的实践工作&#xff0c;允许研究人员快速实现在线搜索&#xff0c;…...

毕业论文初稿写作方法与过程

毕业论文初稿写作方法与过程 毕业论文是大学生在学业结束前必须完成的一项重要任务&#xff0c;它不仅是对学生所学知识的综合运用&#xff0c;也是对学生研究能力和写作能力的检验。写好毕业论文初稿是完成高质量毕业论文的关键一步。下面将具体阐述毕业论文初稿的写作方法和过…...

SLAM 精度评估

SLAM 精度的评估有两个最重要的指标&#xff0c;即绝对轨迹误差&#xff08;ATE&#xff09;和相对位姿误差&#xff08;RPE&#xff09;的 均方根误差&#xff08;RMSE&#xff09;: 绝对轨迹误差:直接计算相机位姿的真实值与 SLAM 系统的估计值之间的差值&#xff0c;首先将…...

Postman使用教程

传统接口风格 RESTful风格 使用Postman完成测试用例目标&#xff1a; Postman教程 &#xff08;1&#xff09;准备工作&#xff0c;下载Postman新建 &#xff08;2&#xff09;登录接口调试-获取验证码 &#xff08;3&#xff09;登录接口调试-登录 &#xff08;4&#xff09;…...

UDP协议深入解析

一. UDP报文结构 UDP报文由以下4个字段组成: 源端口号(Source Port)&#xff1a;16位,标识发送方的端口号。如果发送方没有使用端口号,则该字段为0。 目标端口号(Destination Port)&#xff1a;16位,标识接收方的端口号。 长度(Length)&#xff1a;16位,表示UDP报文的总长度,…...

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…...

打卡第2天----数组双指针,滑动窗口

今天是参与训练营第二天&#xff0c;这几道题我都看懂了&#xff0c;自己也能写出来了&#xff0c;实现思路很重要&#xff0c;万事开头难&#xff0c;希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号&#xff1a;977 不止是在卡尔这里…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...