uni-app嵌套webview页面原生键盘,在使用相机、文件类型时键盘不适配水滴型手机屏幕横屏问题,如何解决?

发布于 1周前 作者 vueper 来自 Uni-App

uni-app嵌套webview页面原生键盘,在使用相机、文件类型时键盘不适配水滴型手机屏幕横屏问题,如何解决?

项目信息 详情
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 10
HBuilderX类型 正式
HBuilderX版本 3.91
手机系统 Android
手机系统版本 Android 12
手机厂商 谷歌
手机机型 谷歌Pixel5
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

无(为适配性问题)

预期结果:

无(为适配性问题)

实际结果:

无(为适配性问题)

bug描述:

目前测试的手机涉及到水滴屏的都会出现嵌套webviwe页面 原生键盘,获取相机、文件类型时候的键盘不适配手机(如:谷歌Pixel5、OPPO 一加Ace2)


7 回复

测试项目附件提供一下


测试项目已上传

回复 圣名科技: 这属于系统默认行为,减少水滴区域遮挡软件盘导致无法正常输入问题。你的期望是显示全屏?实现全屏展示我们需要调用看看。这可能会导致键盘按钮被水滴区域遮挡,

回复 DCloud_Android_ST: 对的,目前期望是全屏;想试试全屏,再看遮挡问题严不严重。或者说能够直接铺满背景色那就太好了

回复 圣名科技: 你这个需求我们记录了 具体什么时候处理未知

很容易复现,uniapp页面调用键盘也直接会,嵌套webview的键盘也会,测试项目已上传


在 uni-app 中嵌套 WebView 页面时,如果遇到原生键盘在使用相机、文件类型等场景下不适配水滴型手机屏幕横屏的问题,可以尝试以下解决方案:

1. 调整 WebView 的布局

  • 手动调整布局:在横屏模式下,手动调整 WebView 的布局,确保输入框和键盘的位置不会受到刘海、水滴屏等异形屏的影响。

  • 使用 safe-area-inset:CSS 提供了 env(safe-area-inset-bottom) 等属性,可以帮助你在异形屏设备上安全地布局内容。你可以根据设备的 safe area 来调整 WebView 的布局。

    .container {
        padding-bottom: env(safe-area-inset-bottom);
    }

2. 监听屏幕旋转事件

  • 监听屏幕旋转:通过 JavaScript 监听屏幕旋转事件,动态调整 WebView 的布局或样式。

    window.addEventListener("orientationchange", function() {
        // 根据横竖屏调整布局
        if (window.orientation === 90 || window.orientation === -90) {
            // 横屏模式
        } else {
            // 竖屏模式
        }
    });

3. 使用原生插件

  • 原生插件调整:如果 uni-app 提供的 WebView 组件无法满足需求,可以考虑使用原生插件(如 Android 的 WebView 或 iOS 的 WKWebView)来处理键盘适配问题。
  • 自定义键盘布局:通过原生代码自定义键盘的布局,确保在横屏模式下键盘不会遮挡输入框。

4. 调整键盘弹出方式

  • 调整键盘弹出行为:在 Android 和 iOS 中,可以通过设置 android:windowSoftInputModeUIKeyboardType 来调整键盘的弹出方式,避免键盘遮挡输入框。

    • Android:在 AndroidManifest.xml 中设置 android:windowSoftInputMode
    • iOS:在 Info.plist 中设置 UIKeyboardType

5. 使用全屏模式

  • 全屏模式:在某些情况下,可以考虑将 WebView 设置为全屏模式,避免键盘弹出时影响布局。你可以通过 CSS 或 JavaScript 动态调整 WebView 的高度和位置。

6. 使用第三方库

  • 第三方库:有些第三方库(如 keyboard-aware-scroll-view)可以帮助你更好地处理键盘弹出时的布局问题。你可以在 WebView 中嵌入这些库来解决键盘适配问题。

7. 测试和适配

  • 多设备测试:在实际开发中,建议在多款异形屏设备上进行测试,确保键盘在各种屏幕尺寸和分辨率下都能正常显示。
  • 动态适配:根据设备的屏幕尺寸和分辨率,动态调整 WebView 的布局和样式,确保键盘不会遮挡输入框。

8. 与原生开发者协作

  • 与原生开发者协作:如果问题依然无法解决,建议与原生开发者协作,通过原生代码来处理键盘的适配问题,确保在异形屏设备上键盘能够正常显示。

示例代码:

<template>
    <view class="container">
        <web-view :src="webViewUrl"></web-view>
    </view>
</template>

<script>
export default {
    data() {
        return {
            webViewUrl: 'https://example.com'
        };
    },
    methods: {
        adjustLayoutForOrientation() {
            if (window.orientation === 90 || window.orientation === -90) {
                // 横屏模式下的布局调整
                document.querySelector('.container').style.paddingBottom = 'env(safe-area-inset-bottom)';
            } else {
                // 竖屏模式下的布局调整
                document.querySelector('.container').style.paddingBottom = '0';
            }
        }
    },
    mounted() {
        window.addEventListener("orientationchange", this.adjustLayoutForOrientation);
    },
    beforeDestroy() {
        window.removeEventListener("orientationchange", this.adjustLayoutForOrientation);
    }
};
</script>

<style>
.container {
    width: 100%;
    height: 100%;
    padding-bottom: env(safe-area-inset-bottom);
}
</style>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!