赞
踩
应用通常使用键盘的方式,系统键盘的弹出收起,获焦失焦,高度监听,安全避让等。
应用经常会遇到如下的业务诉求:
场景一:进入页面TextInput获焦,弹出系统键盘。
场景二:点击按钮或其他事件触发TextInput获焦,弹出系统键盘。
场景三:键盘弹出后只上抬特定的输入组件。
场景四:监听键盘高度,在键盘弹出后让组件上移,键盘收起后让组件恢复。
场景五:设置窗口在键盘抬起时的页面避让模式为上抬,压缩。
进入页面TextInput获焦,弹出系统键盘。
效果图
方案
通过defaultFocus通用属性设置,实现第一次进入页面后弹出键盘。
核心代码
TextInput({ text: $$this.username, placeholder: "请输入用户名" }) .placeholderColor("#D4D3D1") .backgroundColor(this.isUserNameFocus ? "#80FFFFFF" : "#ffffff") .width(260) .borderRadius(8) .id("username") .margin({ top: 10, bottom: 10 }) .onFocus(() => { this.isUserNameFocus = true }) .onBlur(() => { this.isUserNameFocus = false }) .defaultFocus(true) // 进入页面默认获焦
点击登录按钮触发密码输入TextInput获焦,弹出系统键盘。
效果图
方案
通过focusControl.requestFocus,实现输入账号后,点击登录按钮后,代码主动设置TextInput获取焦点
核心代码
Button("登 录") .width(200) .height(45) .fontSize(28) .type(ButtonType.Normal) .backgroundColor("#30FFFFFF") .border({ width: 1, color: Color.White, radius: 8 }) .margin({ top: 50, bottom: 60 }) .onClick(() => { let LoginForm: LoginForm = { username: this.username, password: this.password } let requestId = "" // todo: 无法使用for..in遍历对象 if (!LoginForm.username) { requestId = "username" } else if (!LoginForm.password) { requestId = "password" } else { promptAction.showToast({ message: 'Login success' }) return } let res = focusControl.requestFocus(requestId) // 使选中的this.selectId的组件获焦 promptAction.showToast({ message: requestId + '不能为空' }) })
键盘弹出后只上抬特定的输入组件。
效果图
方案
通过expandSafeArea通用属性设置,实现只上抬红框圈住的特定组件核心代码
.expandSafeArea([SafeAreaType.KEYBOARD], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
监听键盘高度,在键盘弹出后让组件上移,键盘收起后让组件恢复,这种做法定制化程度更高,可以根据开发者需要自行控制页面避让的高度
效果图
方案
先通过expandSafeArea禁止自动键盘弹出上移页面。然后通过window.on(‘avoidAreaChange’)和windowClass.on(‘keyboardHeightChange’),实现监听键盘高度,上抬整个页面view,让输入框(生命周期价值输入框)组件能显示在键盘上方。
核心代码
onPageShow(): void { // ... window.getLastWindow(getContext(this)).then(currentWindow => { let property = currentWindow.getWindowProperties(); let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM); // 初始化显示区域高度 this.screenHeight = px2vp(property.windowRect.height - avoidArea.topRect.height - avoidArea.bottomRect.height); // 监视软键盘的弹出和收起 currentWindow.on('avoidAreaChange', async data => { if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) { return; } this.screenHeight = px2vp(property.windowRect.height - avoidArea.topRect.height - data.area.bottomRect.height); }) }) // ... }
设置窗口在键盘抬起时的页面避让模式为上抬,压缩。
效果图
方案
点击生命周期输入框,通过windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode,实现设置窗口在键盘抬起时的页面避让模式,这种情况下当键盘弹起的时候页面会自动压缩。
核心代码
onPageShow(): void {
// ...
this.windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)
// ...
}
onPageHide(): void {
this.windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.OFFSET)
}
为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线【包含了大厂APP实战项目开发】。
gitee.com/MNxiaona/733GH
gitee.com/MNxiaona/733GH
1.基本概念
2.构建第一个ArkTS应用
3.……
gitee.com/MNxiaona/733GH
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
gitee.com/MNxiaona/733GH
gitee.com/MNxiaona/733GH
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。