鸿蒙应用示例:键盘管理从避免遮挡到显示监听的方案实践
在HarmonyOS应用开发中,键盘管理是一个关键环节,直接影响着用户体验。本文将探讨HarmonyOS键盘管理的几个重要方面,包括如何避免软键盘遮挡输入框、键盘显示与隐藏的监听机制,以及如何手动控制键盘的显示与隐藏。
一、避免软键盘遮挡输入框
在默认情况下,当用户在输入框中输入文本时,软键盘可能会遮挡住输入框,导致用户体验不佳。为了解决这一问题,HarmonyOS提供了.setKeyboardAvoidMode()方法来调整页面布局,以避免软键盘遮挡输入控件。
示例代码:
src/main/ets/entryability/EntryAbility.ets
1 2 3 4 5 6 7 8 9 10 | import { window } from '@kit.ArkUI' ; import { UIAbility } from '@kit.AbilityKit' ; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { windowStage.loadContent( 'pages/Page30' , (err) => { AppStorage.setOrCreate( 'windowStage' , windowStage); //保存windowStage }); } } |
src/main/ets/pages/Index.ets
注意【import { KeyboardAvoidMode } from '@ohos.arkui.UIContext';】需要手动敲代码,自动导包会失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import { window } from '@kit.ArkUI' import { KeyboardAvoidMode } from '@ohos.arkui.UIContext' ; @Entry @Component struct Index { @State arrInfo: string[] = "以热爱祖国为荣,以危害祖国为耻。以服务人民为荣,以背离人民为耻。" .split( '' ) build() { Column() { Button( '键盘RESIZE模式' ).onClick(() => { const windowStage = AppStorage.get( 'windowStage' ) as window.WindowStage; windowStage?.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE); }) Button( '键盘OFFSET模式' ).onClick(() => { const windowStage = AppStorage.get( 'windowStage' ) as window.WindowStage; windowStage?.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.OFFSET); }) Text( '编辑页' ) .fontSize(50) .fontWeight(FontWeight.Bold) List() { ForEach( this .arrInfo, (item: string, index: number) => { ListItem() { Column() { Text(`${item}`) TextArea() } } }) }.layoutWeight(1) Row() { ForEach( '我是工具栏' .split( '' ), (item: string, index: number) => { Column() { Text(`${item}`) }.width( '20%' ) }) }.width( '100%' ) .height(60) .backgroundColor(Color.Gray) } .width( '100%' ) .height( '100%' ) .backgroundColor(Color.Pink) } } |
在上述示例中,通过在页面显示时调用.setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)方法,可以让页面在键盘弹出时自动调整大小,从而避免遮挡。
二、键盘显示与隐藏监听
随着HarmonyOS API版本的演进,原先使用的keyboardShow和keyboardHide事件监听已不再有效。新的监听机制通过keyboardHeightChange事件来实现,该事件可以实时获取键盘的高度变化,进而判断键盘是否显示。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import { window } from '@kit.ArkUI' import { inputMethod } from '@kit.IMEKit' @Entry @Component export struct Index { @State isShowKeyboard: boolean = false aboutToAppear(): void { try { window.getLastWindow(getContext( this ), (err, data) => { if (err.code) { return ; } let windowClass = data; try { windowClass.on( 'keyboardHeightChange' , (data) => { console.log(`当前键盘高度:${data}`); if (data > 0) { this .isShowKeyboard = true ; console.log( '当前键盘已显示' ); } else { this .isShowKeyboard = false ; console.log( '当前键盘已隐藏' ); } }); } catch (exception) { } }); } catch (exception) { } } build() { Column() { Text(`当前键盘状态:${ this .isShowKeyboard ? '显示' : '隐藏' }`) TextInput().width( '100%' ) Button( '收起键盘' ).onClick(() => { inputMethod.getController().stopInputSession() }) } .height( '100%' ) .width( '100%' ) } } |
在这个示例中,通过监听keyboardHeightChange事件,可以根据键盘高度的变化来判断键盘的状态,并做出相应的UI更新。在某些场景下,开发者可能需要手动控制键盘的显示与隐藏,例如在用户点击按钮后隐藏键盘。HarmonyOS提供了API来实现这一点。通过调用inputMethod.getController().stopInputSession()方法,可以立即隐藏当前活跃的输入法会话。
结论
通过上述方法,开发者可以有效地管理HarmonyOS应用中的键盘行为,确保在各种情况下都能提供良好的用户体验。无论是避免软键盘遮挡输入框,还是实时监听键盘的状态变化,抑或是手动控制键盘的显示与隐藏,都有对应的API可供使用。随着HarmonyOS的发展,相信未来还会出现更多便捷的方式来优化键盘管理体验。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了