鸿蒙开发-从入门到劝退系列(更新中)

💡 原文中文,约5000字,阅读约需12分钟。
📝

内容提要

本文介绍了鸿蒙开发中的问题和解决方案,包括界面渲染、文件后缀名、组件宽高设置、WebView内容显示和相对布局组件的使用。提供了处理方案和示例代码。

🔎

延伸解读

环境版本与问题复现的关联性

文章明确列出了开发环境:MacOS 14.2、DevEco Studio 3.1.1 Release、Compile SDK 3.1.0 (API9)、Stage模型、ArkTS语言,测试设备为华为P40Pro(HarmonyOS 4.0.0.128)。界面渲染问题正是在此特定组合下出现,而DevEco Studio的预览器和模拟器却正常。这提示读者:若遇到类似UI不刷新或跳转卡顿,需先核对自身环境是否与文章一致,因为官方已计划在鸿蒙Next中修复,当前版本可能仍存在该缺陷。

百分比宽高与layoutWeight的适用边界

文章指出,在鸿蒙中为组件设置.width('100%')或.height('100%')会固定为父容器总宽高,而非剩余空间,导致如List底部被ActionBar遮挡。解决方案是改用.layoutWeight(1),但该属性仅在Row、Column、Flex布局中生效,且可选值为大于等于0的数字或可转换为数字的字符串。开发者需注意布局容器类型,避免在非弹性容器中误用。

RelativeContainer的已知缺陷与变通思路

文章列举了RelativeContainer的多个问题:无子组件时不显示、子组件不设ID不显示、宽高100%时margin无效、父组件padding不可靠等。对于左边距,可通过给子组件设置offset({x:0})使父组件padding生效,但设置非零offset会导致双重偏移;右边距则无法直接通过offset负值实现,作者建议采用嵌套布局(套娃)解决。这些均为社区经验,并非官方推荐,使用时需自行验证。

相对定位三方法的坐标系差异

文章对比了position、markAnchor和offset:position以父组件左上角为原点,子组件左上角固定在(x,y);markAnchor单独使用时坐标系随父组件对齐方式变化,与position联用时以position点为锚点,且x、y递增方向相反;offset则以前一个组件的右上角为原点进行偏移。理解这些差异有助于在布局中精确控制组件位置,避免混淆。

❓

Q&A

鸿蒙开发中常见的界面渲染问题是什么?

界面渲染问题导致UI无法正常刷新,用户体验卡顿,官方已知晓并计划在下个版本修复。

如何解决EntryAbility.ts文件后缀名的问题?

将EntryAbility.ts文件的后缀名改为ets即可解决导入问题。

在鸿蒙开发中,组件宽高设置为100%时会出现什么问题?

设置为100%时,子组件可能被遮挡,需使用.layoutWeight(1)替代。

WebView在全屏模式下无法正常显示的原因是什么?

WebView在全屏设置下无法正常显示,状态栏下方留白且有灰色蒙层,未找到解决办法。

RelativeContainer组件存在哪些常见问题?

RelativeContainer组件存在子组件不显示、margin无效、padding设置不可靠等问题。

如何在鸿蒙开发中进行相对定位?

可以使用position、markAnchor和offset三种方法进行相对定位,适用于不同的布局需求。

🏷️

标签

➡️

继续阅读