HarmonyOS 鸿蒙Next 自定义键盘编辑输入和切换系统键盘出现光标闪跳

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

HarmonyOS 鸿蒙Next 自定义键盘编辑输入和切换系统键盘出现光标闪跳

【关键字】

自定义键盘光标 / 时间注入 / setTimeOut / 系统键盘 / 光标闪跳

【问题描述】

问题一:

自定义键盘光标,测试后发现,输入过快,光标会跳到前面的字符,自定义键盘切换到系统键盘的时候光标在文本中间,但是切换到系统键盘光标就会跳到最后的位置。

问题二:

不做时间注入,切换不了系统键盘,最后加了setTimeOut,才能达到从自定义键盘切到系统键盘的,那这种冲突要怎么处理呢?

cke_404.png

【解决方案】

问题一:

切换系统键盘做了时间注入。需要把 setTimeOut 这部分代码注释掉。然后在切换键盘的时候,通过requestfocus转移焦点给别的组件。

问题二:

切换中文输入法后并未让输入框失焦,输入框还是聚焦状态,所以组件内无法唤起系统键盘,可以先将输入框的focusable属性或enabled属性设置为false使其变为失焦状态再获焦即可唤起系统键盘。

@Entry
@Component
struct Index {
@State keyboardType: number = 0
@State text: string = ‘’
controller: TextInputController = new TextInputController()
@State flag:boolean = true
build() {
Column() {
Button(‘Set caretPosition 1’)
.onClick(() => {
this.controller.caretPosition(1)
})
TextInput({ text: this.text, placeholder: ‘input your word…’, controller: this.controller })
.placeholderFont({ size: 14, weight: 400 })
.width(320).height(40)
.fontSize(14).fontColor(Color.Black)
.backgroundColor(Color.White)
.id(‘TextInput’)
.customKeyboard(this.keyboardType == 0 ? this.buildCustomKeyboard() : null)
.defaultFocus(true)
.focusable(this.flag)
}
.backgroundColor(Color.Red)
.expandSafeArea([SafeAreaType.SYSTEM])
.width(‘100%’)
.height(‘100%’)
}
@Builder buildCustomKeyboard() {
Column({space: 10}) {
Row({space: 10}) {
Text(‘600’)
.onClick(()=>{
this.text = ‘600’
})
Text(‘800’)
.onClick(()=>{
this.text = ‘800’
})
}
.justifyContent(FlexAlign.SpaceAround)
.width(‘100%’)
.layoutWeight(1)
Row({space: 10}){
Text(‘确认’)
.onClick(()=>{
this.controller.stopEditing()
})
Text(‘中文’)
.onClick(()=>{
this.keyboardType = 1
this.flag = false
setTimeout(()=>{
this.flag = true
focusControl.requestFocus(‘TextInput’)
}, 2000)
})
}
.justifyContent(FlexAlign.SpaceAround)
.width(‘100%’)
.layoutWeight(1)
}
.backgroundColor(Color.White)
.height(200)  }
} 

1 回复

针对HarmonyOS 鸿蒙Next自定义键盘编辑输入和切换系统键盘时出现的光标闪跳问题,可能的原因及解决方案如下:

可能原因

  1. 输入速度过快:自定义键盘在高速输入时可能导致光标定位不准确,进而引发闪跳现象。
  2. 焦点管理不当:在切换键盘时,焦点管理可能未正确处理,导致光标位置异常。
  3. 系统或应用Bug:HarmonyOS或其相关应用可能存在未修复的Bug,影响键盘和光标的行为。

解决方案

  1. 优化输入逻辑:检查并优化自定义键盘的输入逻辑,确保在高速输入时也能准确控制光标位置。
  2. 正确处理焦点:在切换键盘时,通过编程方式确保焦点正确转移,避免光标位置异常。例如,可以使用requestFocus方法将焦点转移到目标组件。
  3. 更新系统和应用:确保HarmonyOS及其相关应用为最新版本,以获取最新的修复和优化。
  4. 清理缓存和配置文件:尝试清理DevEco Studio的缓存和配置文件,有时这可以解决一些由缓存引起的问题。

总结

光标闪跳问题可能由多种因素引起,需要综合考虑输入逻辑、焦点管理、系统及应用版本等多方面因素进行排查和解决。如果上述方法均无法解决问题,建议联系HarmonyOS官方客服以获取更专业的帮助。

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

回到顶部