HarmonyOS鸿蒙Next中子窗口通过promptaction的openCustomDialog方法自定义toast导致软键盘消失
HarmonyOS鸿蒙Next中子窗口通过promptaction的openCustomDialog方法自定义toast导致软键盘消失
通过 promptaction
的 openCustomDialog
方法自定义了一个 toast,但是当焦点在输入框的时候,显示这个 dialog 会造成输入键盘隐藏,然后关闭了之后再弹出软键盘。
您好,setWindowFocusable
属性可设置窗口是否获焦,通过将自定义窗口setWindowFocusable
属性设为false
来控制窗口不获焦,从而避免自定义窗口与其他窗口软键盘的冲突。
设置openCustomDialog
属性isModal
为模态弹窗,setWindowFocusable
设置false
,来控制自定义Toast提示词弹窗仅展示弹窗内容而不获取焦点,消除对主窗口软键盘的影响。 参考demo如下:
import { promptAction} from '@kit.ArkUI'
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
context = this as common.UIAbilityContext;
@Builder
customDialogComponent() {
Column() {
Text('弹窗').fontSize(30)
}.padding(5)
}
build() {
Row() {
Column({ space: 20 }) {
TextInput({ placeholder: 'input your password...' })
.width('95%')
.height(40)
.margin(20)
.type(InputType.Password)
.maxLength(9)
.showPasswordIcon(true)
Text('Click')
.fontSize(30)
.onClick(async () => {
promptAction.openCustomDialog({
builder: () => {
this.customDialogComponent()
},
isModal: true,
onDidAppear: async () => {
//设置false,弹窗不抢焦
let windowClass = await this.context.windowStage.getMainWindow()
windowClass.setWindowFocusable(false)
}
})
})
}
.width('100%')
}
.height('100%')
}
}
更多关于HarmonyOS鸿蒙Next中子窗口通过promptaction的openCustomDialog方法自定义toast导致软键盘消失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用promptAction.openCustomDialog
方法自定义toast时,软键盘消失是由于该方法会触发系统级的窗口焦点变化,导致当前输入框失去焦点,从而隐藏软键盘。这是系统行为,与openCustomDialog
的调用机制有关。
这是一个典型的焦点管理问题。在HarmonyOS Next中,当自定义Dialog显示时,系统会认为当前窗口失去焦点,导致软键盘自动隐藏。
建议检查以下几点:
- 确保Dialog的显示不会强制触发窗口焦点变化
- 尝试设置Dialog的focusable属性为false
- 考虑使用系统原生Toast替代自定义Dialog实现提示功能
如果必须使用自定义Dialog,可以尝试在显示Dialog后手动恢复输入框焦点并重新弹出软键盘。但要注意这可能会造成不好的用户体验。