HarmonyOS 鸿蒙Next 页面底部输入框会顶起视图到状态栏

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

页面构成: titile(顶部)+ List(中间)+ 输入框(底部)

1.在点击输入框时,软键盘会将页面整体顶起来,丢失title,并侵入到状态栏

2.将 顶部title 设置 安全区域后,title 是固定了,但还是侵入到状态栏

如何设置,视图不侵入 状态栏?

代码:

@Entry
@Component
export default struct TestKeyBoardPage {

@State text: string = ''
@State list: number[] = []
controller: TextInputController = new TextInputController()

aboutToAppear() {
for (let index = 0; index < 20; index++) {
this.list.push(index)
}
}

@Builder
TabHeader(text = '') {
Text(text).fontSize(30).fontColor(Color.Red).expandSafeArea([SafeAreaType.KEYBOARD])
}

build() {
Flex({ direction: FlexDirection.Column }) {
Row() {
Text("顶部标题栏内容,我不能被顶出去")
}
.width('100%')
.height(50)
.backgroundColor(Color.Pink)
.padding({ left: 20, right: 20 })
.zIndex(99)
.expandSafeArea([SafeAreaType.KEYBOARD]) // 配置键盘弹出安全区域
Tabs() {
TabContent() {
List({ space: 20 }) {
ForEach(this.list, (item: number) => {
ListItem() {
Row() {
Text('我要正常滚动__测试数据' + item).fontSize(20)
}
}
}, (i: string) => i)
}.width('100%').layoutWeight(1) // 设置组件占比权重
}.tabBar(this.TabHeader('消息'))

TabContent() {
Column() {
}.layoutWeight(1) // 设置组件占比权重
}.tabBar(this.TabHeader('云空间'))
}
.width('100%')
.layoutWeight(1) // 设置组件占比权重
.backgroundColor("#f1f2f6")
.flexGrow(1)

Row() {
TextInput({ text: this.text, placeholder: '底部输入框', controller: this.controller })
}
.width('100%')
.height(50)
.backgroundColor("#dfe4ea")
.padding({ left: 20, right: 20 })
}.width("100%")
}
}

更多关于HarmonyOS 鸿蒙Next 页面底部输入框会顶起视图到状态栏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
修改onWindowStageCreate如下:
深色代码主题
复制
onWindowStageCreate(windowStage: window.WindowStage) {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  windowStage.loadContent('pages/Index', (err, data) => {
    let keyboardAvoidMode = windowStage.getMainWindowSync().getUIContext().getKeyboardAvoidMode();
    // 设置虚拟键盘抬起时把页面上抬直到露出光标
    windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE);
    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. Data: %{public}s', JSON.stringify(data) ?? '');
  });
}

更多关于HarmonyOS 鸿蒙Next 页面底部输入框会顶起视图到状态栏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


textinput有个键盘避让,可以在外层添加一个scroll,参考

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-common-components-text-input-V5#键盘避让

在HarmonyOS鸿蒙系统中,遇到页面底部输入框顶起视图到状态栏的问题,通常是由于软键盘弹出时触发了窗口调整机制。以下是一些直接可能的解决方案:

  1. 调整布局文件:确保你的布局文件中,包含输入框的父容器设置了正确的布局参数。例如,使用RelativeLayoutConstraintLayout时,确保输入框的位置和约束设置正确,避免在软键盘弹出时导致整个视图上移。

  2. 修改窗口软输入模式:在Activity或Ability的启动配置中,尝试修改软输入模式。例如,可以在config.json中设置windowSoftInputMode属性为adjustResizeadjustPan,具体取决于你的布局需求。adjustResize通常会让布局重新调整以适应软键盘,而adjustPan则会让内容整体上移,不改变布局结构。

  3. 检查输入法管理:确保没有第三方输入法管理应用干扰系统的默认行为。有时候第三方输入法应用可能会改变软键盘弹出时的默认行为。

  4. 使用系统API监听软键盘状态:通过监听软键盘的弹出和收起状态,手动调整布局,但这通常不推荐,除非上述方法无效。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部