HarmonyOS 鸿蒙Next 横竖屏经验交流

HarmonyOS 鸿蒙Next 横竖屏经验交流 开一个鸿蒙横竖屏交流的贴子,会列举在其他端如iOS、安卓等常用的场景为案例谈论鸿蒙版本的技术方案或Api实现,为后来同学整理思路,有知道相关技术方案的同学请留言。

  1. 如何启动控制设备的启动方向。

  2. 如何强制关闭横竖屏的重力感应。

  3. 如何通过代码强制控制转屏方向。

  4. 如果同一个业务界面既支持竖屏又支持横屏且横竖屏布局方案差别很大(可以理解为同一个界面竖屏布局是一种布局声明方式、竖屏是另一种布局声明方式甚至用的UI组件都不同)的情况下,如何优雅的处理同界面的横竖屏布局。

  5. A界面跳转B界面的三种情况分析处理:

    5.1 A界面业务要求支持横竖屏,B界面业务要求支持横竖屏。=====> 那么当A界面跳转到B界面时,要求当A界面(处于横屏时)—>跳转到的B界面(也必须处于横屏)—>B界面返回到A界面(此时A界面必须是横屏。)

    5.2 A界面业务要求支持横竖屏,B界面只能支持横屏。=====> 那么当A界面跳转到B界面时,要求当A界面(处于竖屏时)—>跳转到的B界面(只能处于横屏)—>返回到的A界面(只能处于横屏)。


更多关于HarmonyOS 鸿蒙Next 横竖屏经验交流的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你可以在EntryAbility.ts里面获取窗口实例,代码示例:

onWindowStageCreate(windowStage: window.WindowStage) {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    windowStage.getMainWindow((err, data) => {
        if (err.code) {
            console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
            return;
        }
        globalThis.windowClass = data
        console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
    });
    windowStage.loadContent('pages/Index', (err, data) => {
        if (err.code) {
            hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
            return;
        }
        hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
    });
}

然后再你具体页面使用globalThis.windowClass.setPreferredOrientation去修改就好了。

更多关于HarmonyOS 鸿蒙Next 横竖屏经验交流的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


没错,就是这样,哈哈哈,很强。后续有时间我会把上面列出的问题都整理。

姓名:张三
职位:软件工程师
邮箱:zhangsan@example.com
电话:123-456-7890

个人简介:
具有五年软件开发经验,熟悉Java、Python和C++。擅长Web开发和数据分析。

HarmonyOS 鸿蒙Next的横竖屏切换机制主要依赖于系统的自适应布局和组件响应能力。开发者可以通过UIAbilityWindow组件来管理应用在不同屏幕方向下的布局和行为。在config.json中,可以通过"orientation"属性设置应用支持的屏幕方向,如"portrait""landscape""unspecified"

对于横竖屏切换时的UI布局,鸿蒙Next提供了DirectionalLayoutDependentLayout等布局方式,确保UI元素能够根据屏幕方向自动调整位置和大小。此外,开发者可以使用onConfigurationChanged回调函数来监听屏幕方向的变化,并在回调中处理相应的逻辑,如重新加载布局或调整数据展示。

在性能优化方面,建议尽量减少在横竖屏切换时的资源重加载操作,利用State管理机制保持UI状态,避免不必要的刷新。同时,可以通过WindowsetPreferredOrientation方法动态调整应用的首选屏幕方向,提升用户体验。

总的来说,鸿蒙Next的横竖屏切换机制较为灵活,开发者需合理使用布局和回调函数,确保应用在不同屏幕方向下的兼容性和性能表现。

回到顶部