写点什么

鸿蒙应用示例:键盘管理从避免遮挡到显示监听的方案实践

作者:zhongcx
  • 2024-10-12
    广东
  • 本文字数:2195 字

    阅读完需:约 7 分钟

在 HarmonyOS 应用开发中,键盘管理是一个关键环节,直接影响着用户体验。本文将探讨 HarmonyOS 键盘管理的几个重要方面,包括如何避免软键盘遮挡输入框、键盘显示与隐藏的监听机制,以及如何手动控制键盘的显示与隐藏。

一、避免软键盘遮挡输入框

在默认情况下,当用户在输入框中输入文本时,软键盘可能会遮挡住输入框,导致用户体验不佳。为了解决这一问题,HarmonyOS 提供了.setKeyboardAvoidMode()方法来调整页面布局,以避免软键盘遮挡输入控件。

示例代码:

src/main/ets/entryability/EntryAbility.ets

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';】需要手动敲代码,自动导包会失败。

import { window } from '@kit.ArkUI'import { KeyboardAvoidMode } from '@ohos.arkui.UIContext';
@Entry@Componentstruct 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 事件来实现,该事件可以实时获取键盘的高度变化,进而判断键盘是否显示。

示例代码:

import { window } from '@kit.ArkUI'import { inputMethod } from '@kit.IMEKit'
@Entry@Componentexport 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 的发展,相信未来还会出现更多便捷的方式来优化键盘管理体验。

用户头像

zhongcx

关注

还未添加个人签名 2024-09-27 加入

还未添加个人简介

评论

发布
暂无评论
鸿蒙应用示例:键盘管理从避免遮挡到显示监听的方案实践_zhongcx_InfoQ写作社区