HarmonyOS鸿蒙Next中如何设置组件不避让软键盘?
HarmonyOS鸿蒙Next中如何设置组件不避让软键盘? 看文档说给对应组件设置expandSafeArea([SafeAreaType.KEYBOARD]),系统会将软键盘区域视作安全区,从而不会避让软键盘。
代码如下,我想实现拉起键盘的时候,Scroll区域不要遮挡顶部标题,但是没有效果~
请问这种情况有解决办法嘛?
@Entry
@Component
struct Index {
build() {
Column() {
Column() {
Text('标题').width('100%').height(70).textAlign(TextAlign.Center).backgroundColor('#FF5500')
}.expandSafeArea([SafeAreaType.KEYBOARD])
Scroll() {
Column() {
Text('占位').width('100%').height(500).textAlign(TextAlign.Center).backgroundColor('#C0C0C0')
TextInput().width(200)
Text('占位').width('100%').height(900).textAlign(TextAlign.Center).backgroundColor('#C0C0C0')
}.width('100%')
}
.width('100%')
.layoutWeight(1)
.scrollable(ScrollDirection.Vertical)
.align(Alignment.Top)
.backgroundColor('#F5F3F9')
}
}
}
更多关于HarmonyOS鸿蒙Next中如何设置组件不避让软键盘?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
除了.expandSafeArea([SafeAreaType.KEYBOARD])还要设置zIndex属性,让组件的层级更高一些!
更多关于HarmonyOS鸿蒙Next中如何设置组件不避让软键盘?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
方案:
让标题和滚动区域处于平级关系:
Column() {
// 标题区域(独立层级)
Text('标题')
.width('100%').height(70)
.expandSafeArea([SafeAreaType.KEYBOARD])
.zIndex(1) // 设置层级高于滚动区域
// 滚动内容区域
Scroll() {
Column() { /* 内容省略 */ }
}
.layoutWeight(1)
}
设置滚动容器扩展安全区域(楼主如果存在多层滚动容器要逐层设置):
Scroll()
.expandSafeArea([SafeAreaType.KEYBOARD])
好的好的,感谢,
背景知识:
楼主需要键盘弹出式“标题”不会被定出去。可以调整键盘的模式,也可以使用布局固定+SafeAreaType.KEYBOARD 方法处理
问题解决:
代码如下:
import { KeyboardAvoidMode } from '@kit.ArkUI';
@Entry
@Component
struct KeyboardPage {
@State message: string = 'Hello World';
aboutToAppear(): void {
//方法一
this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE_WITH_CARET)
}
build() {
Column() {
Column() {
Text('标题')
.width('100%')
.height(70)
.textAlign(TextAlign.Center)
.backgroundColor('#FF5500')
}
//方法二
//.expandSafeArea([SafeAreaType.KEYBOARD])
//.zIndex(2)
Scroll() {
Column() {
Text('占位')
.width('100%')
.height(500)
.textAlign(TextAlign.Center)
.backgroundColor('#C0C0C0')
TextInput().width(200)
Text('占位')
.width('100%')
.height(900)
.textAlign(TextAlign.Center)
.backgroundColor('#C0C0C0')
}.width('100%')
}
.width('100%')
.layoutWeight(1)
.scrollable(ScrollDirection.Vertical)
.align(Alignment.Top)
.backgroundColor('#F5F3F9')
}
}
}
真机调试:
方法一:
方法二:
好的好的,感谢~,
在HarmonyOS鸿蒙Next中,可通过在组件的layoutConfig属性中设置avoidKeyboard属性为false来阻止组件避让软键盘。例如,在ArkUI中使用以下代码:
.layoutConfig({
avoidKeyboard: false
})
此配置将禁止组件在软键盘弹出时自动调整位置。
在您的代码中,expandSafeArea([SafeAreaType.KEYBOARD])
被应用在包含标题的 Column
组件上,这会导致该组件将软键盘区域视为安全区,从而不会避让键盘。但您的需求是希望 Scroll
区域不遮挡顶部标题,同时键盘弹出时 Scroll
区域能够正常滚动而不被键盘覆盖。
问题可能在于 expandSafeArea
的设置位置。建议将 expandSafeArea([SafeAreaType.KEYBOARD])
应用到 Scroll
组件上,而不是标题区域。这样 Scroll
会忽略键盘的安全区域,保持可滚动内容不被键盘遮挡,同时标题区域保持固定。
修改后的代码片段如下:
@Entry
@Component
struct Index {
build() {
Column() {
Column() {
Text('标题').width('100%').height(70).textAlign(TextAlign.Center).backgroundColor('#FF5500')
}
Scroll() {
Column() {
Text('占位').width('100%').height(500).textAlign(TextAlign.Center).backgroundColor('#C0C0C0')
TextInput().width(200)
Text('占位').width('100%').height(900).textAlign(TextAlign.Center).backgroundColor('#C0C0C0')
}.width('100%')
}
.expandSafeArea([SafeAreaType.KEYBOARD]) // 将 expandSafeArea 移至 Scroll 组件
.width('100%')
.layoutWeight(1)
.scrollable(ScrollDirection.Vertical)
.align(Alignment.Top)
.backgroundColor('#F5F3F9')
}
}
}
这样设置后,Scroll
区域将不会避让软键盘,内容可以正常滚动,同时标题区域保持固定且不被遮挡。