HarmonyOS 鸿蒙Next promptAction.openCustomDialog 不关闭软键盘

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next promptAction.openCustomDialog 不关闭软键盘

promptAction.openCustomDialog  软键盘会关闭掉,closeCustomDialog 后又会显示出来。

怎么样才能让软键盘openCustomDialog 不关闭。

5 回复
import { ComponentContent, UIContext, window } from '@kit.ArkUI'
import { hilog } from '@kit.PerformanceAnalysisKit'
@Entry
@ComponentV2
struct DialogKeywordIndex {
  focusId: string | undefined = undefined

  build() {
    Column() {
      TextInput()
        .width('100%')
        .key('inputId')
        .onBlur(() => {
          this.focusId = undefined
        })
        .onFocus(() => {
          this.focusId = 'inputId'
        })
      Text('点击弹窗').onClick(() => {
        this.getUIContext()
          .getPromptAction()
          .openCustomDialog(new ComponentContent(this.getUIContext(), wrapBuilder(BuilderContent)), {
            onDidAppear: () => {
              if (this.focusId) {
                this.getUIContext().getFocusController().requestFocus(this.focusId)
              }
            }
          })
      })
    }
  }
}

@Builder
function BuilderContent() {
  Column() {
    Text('我是dialog')
  }
}

更多关于HarmonyOS 鸿蒙Next promptAction.openCustomDialog 不关闭软键盘的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


比较临时的方案,并且,键盘层级比较高,键盘会盖住dialog.

厉害了,大佬

从当前来看,因为弹窗,也可能需要软键盘,所以软键盘层级较高,不能隐藏到弹窗下面,如果弹窗显示文字,可以使用promptAction.showToast,然后设置showMode: promptAction.ToastShowMode.TOP_MOST,弹框时,将弹框显示在软键盘上面。

深色代码主题
复制
Button('弹窗')
  .onClick(() => {
    promptAction.showToast({
      message: '账号或密码不能为空',
      showMode: promptAction.ToastShowMode.TOP_MOST
    });
  })

参考的是官方文档中提供的软键盘布局最佳实践:https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-keyboard-layout-adapt-V5#section381324419328

在HarmonyOS鸿蒙系统中,promptAction.openCustomDialog 方法用于打开自定义对话框。如果在调用此方法时软键盘未自动关闭,通常是由于对话框的显示逻辑与软键盘的焦点管理存在冲突。

要解决这个问题,可以尝试以下步骤:

  1. 对话框显示前隐藏软键盘:在调用 openCustomDialog 之前,确保先隐藏软键盘。可以通过监听输入框的焦点变化或使用 InputMethodManager 强制关闭软键盘。

  2. 对话框布局调整:检查自定义对话框的布局,确保没有元素会意外获取焦点,从而重新激活软键盘。对话框的布局应设计为不干扰软键盘的自动隐藏逻辑。

  3. 对话框显示时机:考虑在软键盘完全隐藏后再调用 openCustomDialog,可能需要使用异步处理或延迟执行来确保时机正确。

  4. 系统焦点管理:在对话框打开后,通过代码强制将焦点从输入框转移到对话框的其他部分,或使用系统API管理焦点,避免软键盘重新弹出。

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

回到顶部