根因: Tauri targetSdk 37 强制 edge-to-edge, MainActivity 不处理 IME Insets, 系统不再因键盘缩小窗口, 清单 adjustResize 失效, 键盘直接盖住 WebView。 - 新增 scripts/ci/android-softinput.sh: init 后注入 windowSoftInputMode=adjustResize, 并重写 MainActivity.kt 监听 IME Insets, 键盘可见时把高度加到内容容器底部 (API 30+), 让 WebView 真正变矮, 所有 bottom 弹层自动上移 - CI (android-build.yml) 与本地 build-apk.sh 在 init 之后、build 之前调用该脚本 (幂等) - 新增全局 useKeepInputVisible: 输入框聚焦后用 scroll-into-view-if-needed 滚入可视区, 覆盖页面滚动与 Popup 内部滚动 - 弹层补 max-height + 内部滚动, 防止键盘弹出后顶部被顶出屏幕 - calibrateSafeTop 在键盘弹出时保留旧值, 避免误判导致整页跳动
This commit is contained in:
@@ -54,6 +54,9 @@ function calibrateSafeTop() {
|
||||
// 只在"纵向且高度差合理"时采用, 避免横屏误判
|
||||
const isPortrait = viewW <= viewH
|
||||
const diff = screenH - viewH
|
||||
// 软键盘弹出会让 visualViewport 高度骤减 (diff 远大于状态栏高度)。
|
||||
// 此时必须保留上一次算出的值, 否则会被当成"没有状态栏"而改成 24px, 整页跳动。
|
||||
if (isPortrait && diff >= 120 && root.style.getPropertyValue('--safe-top')) return
|
||||
const measured = isPortrait && diff > 0 && diff < 120 ? diff : 0
|
||||
|
||||
// 取 env() 与实测值的较大者; 两者都失效时给 24px 保底
|
||||
|
||||
Reference in New Issue
Block a user