HarmonyOS 鸿蒙Next promptAction.openCustomDialog 不关闭软键盘
HarmonyOS 鸿蒙Next promptAction.openCustomDialog 不关闭软键盘
怎么样才能让软键盘openCustomDialog 不关闭。
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
方法用于打开自定义对话框。如果在调用此方法时软键盘未自动关闭,通常是由于对话框的显示逻辑与软键盘的焦点管理存在冲突。
要解决这个问题,可以尝试以下步骤:
-
对话框显示前隐藏软键盘:在调用
openCustomDialog
之前,确保先隐藏软键盘。可以通过监听输入框的焦点变化或使用InputMethodManager
强制关闭软键盘。 -
对话框布局调整:检查自定义对话框的布局,确保没有元素会意外获取焦点,从而重新激活软键盘。对话框的布局应设计为不干扰软键盘的自动隐藏逻辑。
-
对话框显示时机:考虑在软键盘完全隐藏后再调用
openCustomDialog
,可能需要使用异步处理或延迟执行来确保时机正确。 -
系统焦点管理:在对话框打开后,通过代码强制将焦点从输入框转移到对话框的其他部分,或使用系统API管理焦点,避免软键盘重新弹出。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。