鸿蒙安全区域
鸿蒙安全区域
两种安全区域扩展方式
说明
从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
摄像头挖孔区域不属于避让区,页面默认不避让挖孔。
从API Version 12开始,可在module.json5中添加以下配置项,摄像头挖孔区域会视为避让区,实现页面默认避让挖孔:
"metadata": [
{
"name": "avoid_cutout",
"value": "true",
}
],
expandSafeArea
设置expandSafeArea属性进行组件绘制扩展时,建议组件尺寸不要设置固定宽高(百分比除外),当设置固定宽高(包括设置'auto')时,扩展安全区域的方向只支持[SafeAreaEdge.TOP, SafeAreaEdge.START],扩展后的组件尺寸保持不变。
expandSafeArea(types?: Arr[] SafeAreaType, edges?: Arr[] SafeAreaEdge): T
控制组件扩展其安全区域。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| types | Arr[] SafeAreaType | 否 | 配置扩展安全区域的类型。未添加Metadata配置项时,页面不避让挖孔,CUTOUT类型不生效。默认值:[SafeAreaType.SYSTEM, SafeAreaType.CUTOUT, SafeAreaType.KEYBOARD]非法值:按默认值处理。 |
| edges | Arr[] SafeAreaEdge | 否 | 配置扩展安全区域的边缘。默认值:[SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM, SafeAreaEdge.START, SafeAreaEdge.END]非法值:按默认值处理。扩展至所有避让区域。 |
SafeAreaType
| 名称 | 值 | 说明 |
|---|---|---|
| SYSTEM | 0 | 系统默认非安全区域,包括状态栏、导航栏。 |
| CUTOUT | 1 | 设备的非安全区域,例如刘海屏或挖孔屏区域。 |
| KEYBOARD | 2 | 软键盘区域。 |
SafeAreaEdge
| 名称 | 值 | 说明 |
|---|---|---|
| TOP | 0 | 上方区域。 |
| BOTTOM | 1 | 下方区域。 |
| START | 2 | 前部区域。(左) |
| END | 3 | 尾部区域。(右) |
对于KEYBOARD的使用
.expandSafeArea([ SafeAreaType.SYSTEM])
你会发现背景出现了明显的偏移
.expandSafeArea([SafeAreaType.KEYBOARD, SafeAreaType.SYSTEM])//偏移消失
SafeAreaType.SYSTEM红色框框出来的部分,就是扩展出来的区域

ignoreLayoutSafeArea
ignoreLayoutSafeArea(types?: Arr[] LayoutSafeAreaType, edges?: Arr[] LayoutSafeAreaEdge): T
扩展组件布局时的安全区。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| types | Arr[] LayoutSafeAreaType | 否 | 扩展布局安全区域的类型。默认值:[LayoutSafeAreaType.SYSTEM],扩展至所有安全区域,比如:状态栏,导航栏和组件级安全区(safeAreaPadding)。非法值:按默认值处理。 |
| edges | Arr[] LayoutSafeAreaEdge | 否 | 扩展布局安全区的边缘,并且支持镜像能力。默认值:[LayoutSafeAreaEdge.ALL],扩展组件所有边缘。非法值:按默认值处理 |
LayoutSafeAreaType
| 名称 | 值 | 说明 |
|---|---|---|
| SYSTEM | 0 | 设置后,组件的布局范围可扩展至组件级安全区(safeAreaPadding)和页面级安全区(状态栏、导航栏、挖孔区)。 |
LayoutSafeAreaEdge
| 名称 | 值 | 说明 |
|---|---|---|
| TOP | 0 | 上方区域。元服务API: 从API version 12开始,该接口支持在元服务中使用。 |
| BOTTOM | 1 | 下方区域。元服务API: 从API version 12开始,该接口支持在元服务中使用。 |
| START | 2 | 前部区域。LTR模式时表示左侧区域,RTL模式表示右侧区域。元服务API: 从API version 20开始,该接口支持在元服务中使用。 |
| END | 3 | 尾部区域。LTR模式时表示右侧区域,RTL模式表示左侧区域。元服务API: 从API version 20开始,该接口支持在元服务中使用。 |
| VERTICAL | 4 | 垂直区域。元服务API: 从API version 20开始,该接口支持在元服务中使用。 |
| HORIZONTAL | 5 | 水平区域。元服务API: 从API version 20开始,该接口支持在元服务中使用。 |
| ALL | 6 | 全部区域。元服务API: 从API version 20开始,该接口支持在元服务中使用。 |
这个和expandSafeArea差不多,就具体在下面讲区别了
两种扩展方式的区别
这个呃。。。还没有API20(用不了)


键盘避让模式
当我们使用输入框输入文字时出现了下面的一种情况

下面的输入框,如果不做键盘避让模式的处理的话,会出现下面的情况

你会发现:你要输入的输入框被弹出来的键盘挡住了的情况(主要针对这种情况)
setKeyboardAvoidMode
setKeyboardAvoidMode(value: KeyboardAvoidMode): void
控制虚拟键盘抬起时页面的避让模式。
getKeyboardAvoidMode
getKeyboardAvoidMode(): KeyboardAvoidMode
返回虚拟键盘抬起时页面的避让模式。
KeyboardAvoidMode
| 名称 | 值 | 说明 |
|---|---|---|
| OFFSET | 0 | 上抬模式。元服务API: 从API version 11开始,该接口支持在元服务中使用。 |
| RESIZE | 1 | 压缩模式。元服务API: 从API version 11开始,该接口支持在元服务中使用。 |
| OFFSET_WITH_CARET | 2 | 上抬模式,输入框光标位置发生变化时候也会触发避让。元服务API: 从API version 14开始,该接口支持在元服务中使用。 |
| RESIZE_WITH_CARET | 3 | 压缩模式,输入框光标位置发生变化时候也会触发避让。元服务API: 从API version 14开始,该接口支持在元服务中使用。 |
| NONE | 4 | 不避让键盘。元服务API: 从API version 14开始,该接口支持在元服务中使用。 |
OFFSET上抬模式

RESIZE压缩模式

光标触发避让:当输入框内的光标位置发生变化(例如用户输入文本时光标移动),系统会动态检测光标是否可能被键盘遮挡。若可能遮挡,则再次触发页面内容上抬。
| 模式 | 触发时机 | 适用场景 |
|---|---|---|
OFFSET(普通上抬) | 仅软键盘弹出时触发一次 | 静态输入框(光标位置不变) |
OFFSET_WITH_CARET | 键盘弹出 + 光标位置变化时触发 | 动态输入(如长文本输入、表单跳转) |
另外一个也一样