HarmonyOS TextInput自定义键盘问题

在页面A中存在TextInput自定义键盘,获取焦点正在显示,之后调用TextInputController.stopEditing关闭键盘,从A打开新页面B,从B返回页面A,此时自定义键盘又显示出来,预期不显示,怎么处理?

HarmonyOS
2024-08-29 09:45:25
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

可以使用focusControl.requestFocus(‘BBB’)方法来使设了BBB的组件获焦点,但是必须要在组件创建之后才能使组件获取到焦点。

对于back回目标页面时不会触发aboutToAppear,可以使用onPageShow,在onPageShow里面设置0延时的回调,确保焦点生效。在跳转页面前点击焦点转移,跳转后返回不显示

可以参考以下demo

import prompt from '@ohos.prompt' 
import router from '@ohos.router'; 
// xxx.ets 
@Entry 
@Component 
struct TextInputExample { 
  controller: TextInputController = new TextInputController() 
  @State inputValue: string = "" 
 
    onPageShow(){ 
      setTimeout(() => { 
        let res=focusControl.requestFocus('BBB') 
        if (res) { 
          prompt.showToast({message: 'Request success'}) 
        } else { 
          prompt.showToast({message: 'Request failed'}) 
        } 
      }, 0) 
    } 
 
  // 自定义键盘组件 
  @Builder CustomKeyboardBuilder() { 
    Column() { 
      Button('x').onClick(() => { 
        // 关闭自定义键盘 
        this.controller.stopEditing() 
      }) 
      Grid() { 
        ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9, '*', 0, '#'], (item:number|string) => { 
          GridItem() { 
            Button(item + "") 
              .width(110).onClick(() => { 
              this.inputValue += item 
            }) 
          } 
        }) 
      }.maxCount(3).columnsGap(10).rowsGap(10).padding(5) 
    }.backgroundColor(Color.Gray) 
  } 
 
  build() { 
    Column() { 
      Button('我会获取焦点') 
        .key('BBB') 
      TextInput({ controller: this.controller, text: this.inputValue }) 
        // 绑定自定义键盘 
        .customKeyboard(this.CustomKeyboardBuilder()).margin(10).border({ width: 1 }).height('48vp') 
      Button('点击焦点转移') 
        .onClick(()=>{ 
          let res=focusControl.requestFocus('BBB') 
          if (res) { 
            prompt.showToast({message: 'Request success'}) 
          } else { 
            prompt.showToast({message: 'Request failed'}) 
          } 
        }) 
      Button('点击跳转页面') 
        .onClick(() => { 
          router.pushUrl({ url: 'pages/Second' }) 
        }) 
    } 
  } 
}

存在默认交互逻辑的组件例如Button、TextInput等,默认即为可获焦,Text、Image等组件则默认状态为不可获焦。不可获焦状态下,无法触发焦点事件。

参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-focus-V5

分享
微博
QQ
微信
回复
2024-08-29 16:41:27
相关问题
HarmonyOS TextInput绑定自定义键盘问题
155浏览 • 1回复 待解决
基于自定义键盘设置光标位置
175浏览 • 1回复 待解决
HarmonyOS 自定义Dialog显示问题
91浏览 • 1回复 待解决
TextInput是否能自定义hover效果
1886浏览 • 1回复 待解决
HarmonyOS 自定义弹窗CustomDialog问题
166浏览 • 1回复 待解决
HarmonyOS 自定义弹窗的问题
225浏览 • 1回复 待解决
HarmonyOS TextInput键盘相关问题咨询
223浏览 • 1回复 待解决
HarmonyOS 引用自定义web的模块问题
73浏览 • 1回复 待解决
自定义弹窗自定义转场动画
654浏览 • 1回复 待解决
自定义弹窗使用相关问题
630浏览 • 1回复 待解决
HarmonyOS 自定义Dialog背景色透明问题
234浏览 • 1回复 待解决
HarmonyOS 如何自定义BuildMode?
105浏览 • 1回复 待解决
自定义参数BuildProfile的问题汇总
774浏览 • 1回复 待解决
自定义装饰器的使用问题
454浏览 • 1回复 待解决