在华为HarmonyOS的世界里,我们常常会遇到这样的问题:软键盘突然弹起,不仅遮挡了重要的输入框,还可能导致整个页面布局错乱,让人措手不及。但别担心,今天就让我们一起揭开ArkUI框架如何巧妙解决这个软键盘弹起顶起页面问题的神秘面纱。
一、组件设置中的expandSafeArea属性
在Stack布局中,当宽高都设置为100%时,软键盘弹起确实会顶起页面。但别急,ArkUI框架为我们提供了完美的解决方案——使用expandSafeArea
属性!这个属性可以让你轻松控制组件的安全区域,实现软键盘的避让。
例如,在方舟UI框架(ArkUI)中,你可以这样设置:
@Component struct AvoidDialogPage {
@Statemessage = '打开弹窗';
final dialogController = CustomDialogController(builder: CustomDialogExample());
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => this.dialogController.open());
.width('100%')
.height('100%');
}
.width('100%')
.height('100%');
}
}
@CustomDialogstruct
CustomDialogExample {
final controller = CustomDialogController(builder: CustomDialogExample({}));
Column() {
TextInput(
expandSafeArea: [SafeAreaType.KEYBOARD, SafeAreaType.SYSTEM],
borderWidth: 0.5,
borderRadius: 4,
height: 40,
defaultFocus: true,
margin: EdgeInsets.only(top: 30, left: 16, right: 16),
);
}
}
在这个例子中,expandSafeArea
属性确保了软键盘弹起时,页面布局不会发生改变,输入框依然可见且可交互。
二、键盘避让的另一种模式
除了expandSafeArea
属性,你还可以设置键盘的KeyboardAvoidMode
值为RESIZE
。但请注意,在这种模式下,expandSafeArea
设置将不起作用。这时,你可以考虑使用三方库或系统原生方法来实现键盘避让。
例如,使用系统原生方法:
import { KeyboardAvoidMode } from '@kit.ArkUI';
onWindowStageCreate(windowStage) {
windowStage.loadContent('pages/Index', (err, data) {
let keyboardAvoidMode = windowStage.getMainWindowSync().getUIContext().getKeyboardAvoidMode();
windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE);
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
});
}
三、总结
在华为HarmonyOS的世界里,软键盘弹起顶起页面问题并不是不可解决的难题。通过合理使用ArkUI框架中的expandSafeArea
属性,结合系统原生方法,你可以轻松实现软键盘的避让,确保页面布局的稳定性和用户体验的流畅性。希望这篇文章能为你带来一些启发和帮助,让你在鸿蒙开发的世界里更加游刃有余!
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
Copyright 2005-2024 yuanmayuan.com 【源码园】 版权所有 备案信息
声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告