HarmonyOS NEXT实战:获取窗口属性

简介: 本教程介绍在HarmonyOS Next的Stage模型下,如何通过Window类获取窗口属性,包括窗口尺寸、全屏状态、亮度等信息,并提供示例代码实现获取窗口宽度和高度的方法,适用于应用窗口管理与界面适配开发。

HarmonyOS Next实战##HarmonyOS SDK应用服务##教育

参考资料:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-window#getwindowproperties9

在Stage模型下,管理应用窗口的典型场景有:

  • 设置应用主窗口属性及目标页面
  • 设置应用子窗口属性及目标页面
  • 体验窗口沉浸式能力
  • 设置悬浮窗
  • 监听窗口不可交互与可交互事件

以下介绍获取窗口属性的方式:
第1步:获取Window类

getLastWindow(ctx: BaseContext): Promise<Window>

获取当前应用内最上层的子窗口,若无应用子窗口,则返回应用主窗口,使用Promise异步回调。

第2步:获取当前窗口的属性

getWindowProperties(): WindowProperties

获取当前窗口的属性,返回WindowProperties。

WindowProperties各属性解释

  • windowRect:窗口尺寸,可在页面生命周期onPageShow或应用生命周期onForeground阶段获取。
  • drawableRect:窗口内的可绘制区域尺寸,其中左边界上边界是相对于窗口计算。在Stage模型下,需要在调用loadContent()或setUIContent()加载页面内容后使用该接口。
  • type:窗口类型。
  • isFullScreen:是否全屏,默认为false。true表示全屏;false表示非全屏。
  • isLayoutFullScreen:窗口是否为沉浸式且处于全屏模式(不在悬浮窗、分屏等场景下),默认为false。true表示沉浸式且处于全屏模式;false表示非沉浸式或非全屏模式。
  • focusable:窗口是否可聚焦,默认为true。true表示可聚焦;false表示不可聚焦。
  • touchable:窗口是否可触摸,默认为true。true表示可触摸;false表示不可触摸。
  • brightness:屏幕亮度。该参数为浮点数,可设置的亮度范围为[0.0, 1.0],其取1.0时表示最大亮度值。如果窗口没有设置亮度值,表示亮度跟随系统,此时获取到的亮度值为-1。
  • isKeepScreenOn:屏幕是否常亮,默认为false。true表示常亮;false表示不常亮。
  • isPrivacyMode:隐私模式,默认为false。true表示模式开启;false表示模式关闭。
  • isTransparent:窗口背景是否透明。默认为false。true表示透明;false表示不透明。
  • id:窗口ID,默认值为0,该参数应为整数。
  • displayId:窗口所在屏幕ID,默认返回主屏幕ID,该参数应为整数。

以下以获取窗口属性的宽高为例,实战代码如下:

import {
    common } from '@kit.AbilityKit';
import {
    window } from '@kit.ArkUI';
import {
    BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct GetWindowPropertiesPage {
   
  @State windowWidth: number = 0
  @State windowHeight: number = 0

  aboutToAppear(): void {
   
    try {
   
      let context = getContext(this) as common.UIAbilityContext;
      let promise = window.getLastWindow(context);
      promise.then((data) => {
   
        //获取窗口对象
        let windowClass = data;
        try {
   
          //获取窗口属性
          let properties = windowClass.getWindowProperties();
          let rect = properties.windowRect;
          //rect.width: 窗口宽度;rect.height: 窗口高度
          this.windowWidth = px2vp(rect.width)
          this.windowHeight = px2vp(rect.height)
        } catch (exception) {
   
          console.error('Failed to obtain the window properties. Cause: ' + JSON.stringify(exception));
        }
        console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));
      }).catch((err: BusinessError) => {
   
        console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));
      });
    } catch (exception) {
   
      console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception));
    }
  }

  build() {
   
    Column({
    space: 10 }) {
   
      Text('GetWindowProperties Page')
        .fontSize(20)
        .fontWeight(FontWeight.Bold)

      Text(`windowWidth = ${
     this.windowWidth}`)
      Text(`windowHeight = ${
     this.windowHeight}`)
    }
    .height('100%')
    .width('100%')
  }
}
目录
相关文章
|
7月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
892 83
|
8月前
|
开发者 容器
鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Column和Row组件的使用以及线性布局的方法。
653 12
|
8月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解滑块Slider和进度条Progress组件的使用。
320 1
|
8月前
|
JavaScript 开发者 索引
鸿蒙应用开发从入门到实战(九):ArkTS渲染控制
ArkTS拓展了TypeScript,可以结合ArkUI进行渲染控制,是的界面设计具有可编程性。本文简要描述鸿蒙应用开发中的条件渲染和循环渲染。
322 5
|
7月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1179 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
913 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1049 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
数据安全/隐私保护 开发者
鸿蒙应用开发从入门到实战(十一):ArkUI组件Text&TextInput
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解文本组件Text和TextInput的使用。
477 3
|
8月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
314 1
|
7月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
340 0

热门文章

最新文章