HarmonyOS 鸿蒙Next全屏模式与非全屏模式切换

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next全屏模式与非全屏模式切换
APP启动页需要全屏,于是在entryAbility里使用了codelabs里的requestFullScreen方式开启全屏。但是启动页进入APP主页之后不需要全屏模式了,怎样可以切换回非全屏模式。(APP是单UIAbility)
全屏方法需要windowStage对象,但是在后续entry component不知道如何获取windowStage, 以及是否可以只在当前的entry component中开启全屏,router跳转到其他entry component之后就自动为非全屏模式?
 

public static requestFullScreen(windowStage: window.WindowStage, context: Context): void {
windowStage.getMainWindow((err: BusinessError, data: window.Window) => {
if (err.code) {
Logger.error(TAG, 'Failed to obtain the main window. Cause: ' + JSON.stringify(err));
return;
}
let windowClass: window.Window = data;
Logger.info(TAG, 'Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));

// Realize the immersive effect
let isLayoutFullScreen = true;
try {
// Get status bar height.
let area: window.AvoidArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
let naviBarArea: window.AvoidArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR);
Logger.info(TAG, 'Succeeded get the window navigation indicator HEIGHT: ' + px2vp(naviBarArea.bottomRect.height) + ' area: ' + JSON.stringify(naviBarArea));
WindowUtil.getDeviceSize(context, area, naviBarArea);
if (area.topRect.height > 0) {
let promise: Promise<void> = windowClass.setWindowLayoutFullScreen(isLayoutFullScreen);
promise.then(() => {
Logger.info(TAG, 'Succeeded in setting the window layout to full-screen mode.');
}).catch((err: BusinessError) => {
Logger.error(TAG, 'Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err));
});
}
} catch {
Logger.error(TAG, 'Failed to set the window layout to full-screen mode. ');
}
});

更多关于HarmonyOS 鸿蒙Next全屏模式与非全屏模式切换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
1、在EntryAbility页面,声明如下语句:
export let windowStage_: window.WindowStage;

export let context: Context;<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

2、在后续entry component的页面,导入EntryAbility,即:

import {context, windowStage_} from '…/entryability/EntryAbility’<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

可以解决“在后续entry component不知道如何获取windowStage”的问题。

更多关于HarmonyOS 鸿蒙Next全屏模式与非全屏模式切换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以使用一个静态类,或者单例 存储 windowStage

export default class Utils {
  private constructor() {
  }

private static instance: Utils; //每个UIAbility中都包含了一个Context属性,提供操作应用组件、获取应用组件的配置信息等能力。 private static sAbilityContext: common.UIAbilityContext; private static sUiContext?: UIContext | null private static mainWindow?: window.Window | null

public static getInstance(): Utils { if (!Utils.instance) { Utils.instance = new Utils(); } return Utils.instance; }

/**

  • 初始化工具类,
  • 1、涉及到需要context的位置都可以用Utils来获取
  • 2、涉及到需要初始化的工具类,可以放到此处初始化
  • @param entryContext */ public static init(entryContext: common.UIAbilityContext) { Utils.sAbilityContext = entryContext }

/**

  • 设置主窗口window
  • @returns */ public static setMainWindow(mainWindow?: window.Window) { try { Utils.mainWindow = mainWindow if (mainWindow) { Utils.sUiContext = mainWindow.getUIContext() } } catch (e) { console.error(e) } } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
export default class EntryAbility extends UIAbility {
//Ability 创建的时候
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
//初始化通用工具类
Utils.init(this.context)
}

//Ability加载视图UI的时候 onWindowStageCreate(windowStage: window.WindowStage): void { windowStage.loadContent(‘pages/WelComePage’, (err, data) => { //初始化主窗口 Utils.setMainWindow(windowStage.getMainWindowSync()) }); } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

关于HarmonyOS 鸿蒙Next全屏模式与非全屏模式的切换,以下是相关说明:

在HarmonyOS 鸿蒙Next系统中,全屏模式与非全屏模式的切换通常可以通过系统设置或应用内提供的按钮来实现。例如,在某些应用中,可以通过点击视频播放窗口右下角的全屏按钮来切换至全屏模式。

对于开发者而言,可以通过编程方式实现全屏与非全屏的切换。这通常涉及到利用系统提供的API,如@ohos.window接口,通过编写代码控制应用窗口的布局状态。具体实现步骤包括初始化相关组件、设置窗口布局参数等。

此外,HarmonyOS 鸿蒙Next还支持通过ArkUI框架进行UI开发,开发者可以在页面构建过程中通过设置windowClass的setWindowLayoutFullScreen方法来实现全屏模式的切换。

如果遇到无法切换全屏模式的问题,建议检查系统和应用是否为最新版本,以确保所有功能正常可用。如果问题依旧无法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部