HarmonyOS requestFocus能否走焦到自定义组件?

requestFocus的API文档中提到“支持焦点控制的组件:TextInput、TextArea、Search、Button、Text、Image、List、Grid”,那是否除了上述类型的组件以外用requestFocus都无法获取焦点呢?

项目中自己封装了一个组件(以下称为“GFTextInput”),GFTextInput里包含了一个 textInput,textInput 设置了groupDefaultFocus为 true,在业务代码中调用requestFocus走焦到GFTextInput组件,发现没有效果,是不是因为自定义组件不支持requestFocus?那么,如果想让自定义组件里的 textInput 获焦,有什么方法?

因为 textInput 写在GFTextInput里面,textInput 的 key 也在GFTextInput里面定义的,业务代码也不好获取,有没有简单一点的方法可以实现呢?

HarmonyOS
2024-10-17 10:35:07
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

焦点控制相关文档:

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

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-common-events-focus-event-V5#默认焦点

可参考以下demo:

import promptAction from '@ohos.promptAction'  
let customDialogId: number = 0  
@Builder  
function customDialogBuilder() {  
  Column() {  
    TextInput({ placeholder: 'input your username' }).margin(20)  
      .focusable(true)  
      .focusOnTouch(true)  
      .defaultFocus(true)  
      .enableKeyboardOnFocus(true)  
    Row() {  
      Button("确认").onClick(() => {  
        promptAction.closeCustomDialog(customDialogId)  
      })  
      Blank().width(50)  
      Button("取消").onClick(() => {  
        promptAction.closeCustomDialog(customDialogId)  
      })  
    }  
  }.height(200).padding(5)  
}  
@Entry  
@Component  
struct Index {  
  @State message: string = '评论'  
  build() {  
    Row() {  
      Column() {  
        Text(this.message)  
          .fontSize(50)  
          .fontWeight(FontWeight.Bold)  
          .onClick(() => {  
            promptAction.openCustomDialog({  
              builder: customDialogBuilder.bind(this)  
            }).then((dialogId: number) => {  
              customDialogId = dialogId  
            })  
          })  
        //普通TextInput  
        TextInput({ placeholder: 'input your username' }).margin(20)  
          .focusable(true)  
          .focusOnTouch(true)  
          .defaultFocus(true)  
          .enableKeyboardOnFocus(true)  
      }  
      .width('100%')  
    }  
    .height('100%')  
  }  
}

自定义组件在焦点规则中确实属于无获焦能力的组件,通过requestFocus为自定义组件获焦会导致失败。目前暂无其他更好的替代解决方案,可以通过在初始化GFTextInput组件时传入对应内部textInput组件id的方式,从外部持有textInput子组件id。

分享
微博
QQ
微信
回复
2024-10-17 17:57:05
相关问题
HarmonyOS Video组件能否设置自定义header
226浏览 • 1回复 待解决
应用通用获方式如何实现
1851浏览 • 1回复 待解决
HarmonyOS 自定义组件问题
295浏览 • 1回复 待解决
如何屏蔽方向键事件
1982浏览 • 1回复 待解决
getContext(this)能否自定义类中使用
2202浏览 • 1回复 待解决
自定义组件嵌套子组件
9359浏览 • 3回复 待解决
HarmonyOS ArkUI加载自定义组件
342浏览 • 1回复 待解决
HarmonyOS如何自定义组件的Controller?
219浏览 • 1回复 待解决
HarmonyOS如何自定义视频组件样式
356浏览 • 1回复 待解决
HarmonyOS CoverFlow效果自定义组件实现
175浏览 • 1回复 待解决
HarmonyOS如何手动重置自定义组件
271浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人