HarmonyOS 输入法光标控制

在onSubmit回调里写组件间的光标跳转。onSubmit回车之后【.enterKeyType(EnterKeyType.Next)】默认会把键盘关闭,我再去focusControl.requestFocus(nextKeyStr)就会呈现一个键盘先关闭再弹起的效果,这样看起来很不流畅,按理想状态来说,设置了EnterKeyType.Next点击‘下一步’应该是流畅的光标跳转到下一个输入框吧?但是onSubmit默认会关闭键盘。有什么办法解决流畅问题的?是要去自定义输入法吗?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

1.在EntryAbility中

//将 onWindowStageCreate(windowStage: window.WindowStage): void方法替换为:

onWindowStageCreate(windowStage: window.WindowStage): void {
  // Main window is created, set main page for this ability
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

  windowStage.loadContent('pages/Index', (err) => {
  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.');

AppStorage.setOrCreate('windowStage',windowStage);
});

}

2.将Index.ets中代码替换为:

import { window } from '@kit.ArkUI'
@Entry
@Component
struct ListExample {
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  selectIndex:number = 0
  scroller: Scroller = new Scroller()
  @State keyboardHeight:number = 0
  aboutToAppear() {
    let windowClass: window.Window = (AppStorage.get('windowStage') as window.WindowStage).getMainWindowSync()
    windowClass.on('keyboardHeightChange', (data) => {
      this.keyboardHeight = px2vp(data)
    });
  }
  build() {
    Column() {
      List({ space: 20, initialIndex: 0,scroller:this.scroller }) {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Column(){
              Text('a' + item + '-' + this.keyboardHeight)
                .width('100%').height(100).fontSize(16)
                .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
              TextInput().width('100%').height(80)
                .margin({top:10})
                .id('a'+item)
                .onFocus(()=>{
                  console.log('focus:  a'+item)
                  this.selectIndex = item
                  console.log('aaa' + this.selectIndex)
                })
                .onSubmit((enterKey: EnterKeyType, event: SubmitEvent)=>{
                focusControl.requestFocus('a'+(this.selectIndex+1));
                this.scroller.scrollToIndex(this.selectIndex+1,true);
                event.keepEditableState();
              })
            }
          }
        }, (item: string) => item)
      }
      .listDirection(Axis.Vertical) // 排列方向
      .scrollBar(BarState.Off)
      .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
      .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
      .width('90%')
      .margin({  bottom: this.keyboardHeight })
    }
    .width('100%')
    .height('100%')
    .backgroundColor(0xDCDCDC)
    .padding({ top: 5 })

  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
小程序输入法键盘光标问题
338浏览 • 1回复 待解决
HarmonyOS如何监听输入法显示隐藏
620浏览 • 1回复 待解决
输入法编程接口吗?
4717浏览 • 1回复 待解决
如何监听输入法输入内容的变化?
379浏览 • 1回复 待解决
新版api9本地模拟器安装中文输入法
3525浏览 • 1回复 待解决