HarmonyOS 鸿蒙Next:为什么我最新版本的deveco studio预览窗的安全范围不是全屏,上面怎么也显示不出来

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:为什么我最新版本的deveco studio预览窗的安全范围不是全屏,上面怎么也显示不出来

为什么我最新版本的deveco studio 预览窗的安全范围不是全屏,上面怎么也显示不出来

cke_303.png

cke_758.png



关于HarmonyOS 鸿蒙Next:为什么我最新版本的deveco studio预览窗的安全范围不是全屏,上面怎么也显示不出来的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

10 回复

根据文档,应用在默认情况下窗口背景绘制范围是全屏,但UI元素被限制在安全区内(自动排除状态栏和导航条)进行布局,来避免界面元素被状态栏和导航条遮盖。如图:

cke_617.png

可以通过如下两种方式实现沉浸式效果:

1.状态栏和导航条颜色相同场景,可以通过设置窗口的背景色来实现沉浸式效果。窗口背景色可通过setWindowBackgroundColor()进行设置。

  1. import { AbilityConstant, UIAbility, Want } from '[@kit](/user/kit).AbilityKit';
  2. import { window } from '[@kit](/user/kit).ArkUI';
  3. export default class EntryAbility extends UIAbility {
  4. // ...
  5. onWindowStageCreate(windowStage: window.WindowStage): void {
  6. windowStage.loadContent('pages/Index', (err, data) => {
  7. if (err.code) {
  8. return;
  9. }
  10. // 设置全窗颜色和应用元素颜色一致
  11. windowStage.getMainWindowSync().setWindowBackgroundColor('#008000');
  12. });
  13. }
  14. }

2.状态栏和导航条颜色不同时,可以使用expandSafeArea属性扩展安全区域属性进行调整。

  1. // xxx.ets
  2. [@Entry](/user/Entry)
  3. [@Component](/user/Component)
  4. struct Example {
  5. build() {
  6. Column() {
  7. Row() {
  8. Text('Top Row').fontSize(40).textAlign(TextAlign.Center).width('100%')
  9. }
  10. .backgroundColor('#F08080')
  11. // 设置顶部绘制延伸到状态栏
  12. .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])
  13. Row() {
  14. Text('Bottom Row').fontSize(40).textAlign(TextAlign.Center).width('100%')
  15. }
  16. .backgroundColor(Color.Orange)
  17. // 设置底部绘制延伸到导航条
  18. .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
  19. }
  20. .width('100%').height('100%').alignItems(HorizontalAlign.Center)
  21. .backgroundColor('#008000')
  22. .justifyContent(FlexAlign.SpaceBetween)
  23. }
  24. }

66666, 找了一圈,还得是你呀

HarmonyOS的社区里有很多技术大牛分享经验,学到了很多有用的知识。

我的设置了还是没用啊

两种布局方式,一个系统默认的,第二个是全屏.全屏的方式只推荐在显示图片和视频的时候为全屏,隐藏状态栏和导航条也有两种方式: 一个是在组件上使用 .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])属性, 一个是在EntryAbility.ets入口处直接设置为全屏,具体代码如下: onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onWindowStageCreate’);

windowStage.loadContent('pages/Index', (err) => {
  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.');

  // 获取应用主窗口
  let windowClass: window.Window = windowStage.getMainWindowSync();
  // 2. 设置状态栏和导航条隐藏,
  // 设备(电话、平板电脑、二合一、汽车)的默认系统功能不包括“setSpecificSystemBarEnabled”的系统功能。
  // windowClass.setSpecificSystemBarEnabled('status', true, true)

  // 设置窗口属性可以全屏布局
  windowClass.setWindowLayoutFullScreen(true);
  // 设置背景颜色
  // windowClass.setWindowBackgroundColor('#ffde0000')
  windowClass.setWindowSystemBarProperties({statusBarColor: BlurStyle.Thin.toString(), navigationBarColor: "#00000000"
  });
});

} 设置窗口布局都在windowClass方法中, 具体其中属性可以参考文档给的例子, 此处不便展示,太多了

希望HarmonyOS能加强与其他品牌设备的兼容性,让更多人受益。

我都用白的,没影响
我的上面和下面都有白色

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

楼上可以解决

回到顶部