HarmonyOS鸿蒙Next中设置了输入框避让键盘,并且顶部标题控件设置了安全区域,布局弹起后会遮挡顶部控件
HarmonyOS鸿蒙Next中设置了输入框避让键盘,并且顶部标题控件设置了安全区域,布局弹起后会遮挡顶部控件
我为每个TextInput的自定义键盘设置了supportAvoidance: true
属性,保证其能够始终可见
顶部的标题控件为了始终保持可见,我为其设置了expandSafeArea([SafeAreaType.KEYBOARD])
属性
但是点击输入框弹起自定义键盘时,布局会覆盖在浅蓝色标题控件的上层
参考如下demo:
import window from '@ohos.window';
@Entry
@Component
struct Index {
@State screenHeight: number = 0;
@State text: string = ''
@State list: number[] = []
controller: TextInputController = new TextInputController()
aboutToAppear() {
for (let index = 0; index < 20; index++) {
this.list.push(index)
}
window.getLastWindow(getContext(this)).then(currentWindow => {
let property = currentWindow.getWindowProperties();
let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_KEYBOARD);
// 初始化显示区域高度
this.screenHeight = px2vp(property.windowRect.height - avoidArea.bottomRect.height);
// 监视软键盘的弹出和收起
currentWindow.on('avoidAreaChange', async data => {
if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) {
return;
}
this.screenHeight = px2vp(property.windowRect.height - data.area.bottomRect.height);
})
})
}
}
更多关于HarmonyOS鸿蒙Next中设置了输入框避让键盘,并且顶部标题控件设置了安全区域,布局弹起后会遮挡顶部控件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
.zIndex(99) .expandSafeArea([SafeAreaType.KEYBOARD])
在HarmonyOS鸿蒙Next中,输入框避让键盘的功能是通过InputMethodPanel
和InputMethodService
实现的。当键盘弹出时,系统会自动调整输入框的位置以避免被键盘遮挡。同时,顶部标题控件设置了安全区域以确保内容不会被系统状态栏或刘海屏等遮挡。
布局弹起后遮挡顶部控件的问题,可能是由于安全区域的设置和输入框避让键盘的逻辑冲突导致的。在鸿蒙Next中,安全区域的计算是基于设备的屏幕尺寸和系统状态栏的高度,而输入框避让键盘的调整是基于当前窗口的可见区域。
要解决这个问题,可以检查以下两点:
- 确保安全区域的设置正确,使用
SafeArea
组件包裹顶部标题控件,并根据系统提供的安全区域Insets进行调整。 - 检查输入框避让键盘的逻辑,确保在键盘弹出时,输入框的调整不会影响到顶部控件的显示。可以通过监听键盘的弹出和隐藏事件,动态调整布局的padding或margin。
如果问题依旧存在,可能需要进一步调试布局层级和组件的绘制顺序,确保顶部控件始终位于输入框的上方。
在HarmonyOS鸿蒙Next中,如果输入框避让键盘导致顶部标题控件被遮挡,可以通过以下方式优化布局:
- 使用
ScrollView
:将内容包裹在ScrollView
中,当键盘弹出时,内容会自动滚动,避免遮挡。 - 调整布局结构:确保顶部标题控件位于安全区域之外,或者设置
paddingTop
来预留空间。 - 动态调整布局:监听键盘事件,动态调整布局高度或位置,确保标题控件始终可见。
- 使用
fitSystemWindows
:在布局中设置fitSystemWindows="true"
,系统会自动调整布局以适应键盘和安全区域。
通过这些方法,可以有效避免键盘弹出时遮挡顶部控件的问题。