【关键字】
textInput / 拉起软键盘 / 监听软键盘 / 主动获焦
【问题描述】
有没有编辑框主动获焦调起键盘的方式?目前看编辑框有的会默认主动调起,有的必须要手动点击获焦之后调起,不清楚为啥会不一致?
有没有对应方法可以监听到键盘的显隐,因为有场景需要做不同的处理。
【解决方案】
默认拉起键盘可以通过focusControl获取textInput组件的焦点实现。
样例代码:
@Entry
@Component
export default struct KeyboardDemo {
@State showKeyboard: boolean = false;
controller: TextInputController = new TextInputController()
aboutToAppear() {
setTimeout(() => {
focusControl.requestFocus('ADD_TASK')
}, 500)
}
build() {
Column() {
Text('KeyboardDemo')
TextInput({
text: '123',
controller: this.controller,
placeholder: '123',
})
.width(300)
.height(46)
.fontSize(16)
.enableKeyboardOnFocus(true)
.key('ADD_TASK')
}
}
}
监听软键盘的可以通过两个方式:
-
通过输入法框架模块来监听(@ohos.inputMethod)用InputMethodController实例的on('sendKeyboardStatus')方法来监听,直接在inputMethodController.on('sendKeyboardStatus', callback)的callback中处理。
通过输入法框架模块来监听软键盘状态参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inputmethod#ZH-CN_TOPIC_0000001847050076__onsendkeyboardstatus10
-
通过窗口模块来监听(@ohos.window)用Window实例的on('keyboardHeightChange')方法来监听软键盘高度,也能判断软键盘状态的。
通过窗口模块来监听软键盘状态参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-window-0000001820880785#ZH-CN_TOPIC_0000001811317218__onkeyboardheightchange7
示例代码:
let windowClass: window.Window | undefined = undefined; try { window.getLastWindow(this.context, (err: BusinessError, data) => { const errCode: number = err.code; if (errCode) { console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err)); return; } windowClass = data; console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data)); windowClass.on('avoidAreaChange', (data) => { console.info('Succeeded in enabling the listener for system avoid area changes. type:' + JSON.stringify(data.type) + ', area: ' + JSON.stringify(data.area)); }); }); } catch (exception) { console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception)); }