在 OpenHarmony(含 HarmonyOS NEXT/标准 OpenHarmony)上做验证码(图形验证码 / 短信验证码 / 滑块验证码等)的折叠屏适配,核心不是“验证码算法”,而是折叠屏形态下的 UI 布局、输入体验与状态连续性。下面从工程实践角度说明。
折叠屏常见形态:
验证码适配要关注:
OpenHarmony 推荐:
Flex / Grid / RelativeContainer示例(ArkTS):
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
Text('请输入验证码')
.fontSize(18)
Row() {
TextInput({ placeholder: '验证码' })
.width('60%')
Button('获取')
.width('35%')
}
.width('90%')
.justifyContent(FlexAlign.SpaceBetween)
}
✅ 展开 / 折叠都会自动重排
import { mediaquery } from '@kit.ArkUI'
let isExpanded = false
mediaquery.matchMediaSync('(min-width: 600vp)').on('change', (e) => {
isExpanded = e.matches
})
根据 isExpanded:
验证码常见问题是键盘弹起遮挡输入框
EditText 的自动上移TextInput()
.onFocus(() => {
// 页面自动滚动
})
window.on('keyboardHeightChange', (height) => {
// 动态调整 paddingBottom
})
⚠️ 折叠屏切换 不会销毁页面,但你要防止:
✅ 正确做法:
@State 或 AppStorageaboutToAppear 重置@State code: string = ''
TextInput({ text: this.code })
.onChange(val => this.code = val)
SVG 或 Canvas% / vp100%半折时:
可用:
mediaquery.matchMediaSync('(fold-status: half)')
TextInput()
.type(InputType.Number)
.maxLength(6)
window.setWindowFlags(WindowFlag.AVOID_SCREEN_SHOT)
如果你能说明:
我可以给你一份可直接用的完整示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。