uni-app 安卓底部安全区域处理

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

uni-app 安卓底部安全区域处理

系统信息

参数
SDKVersion
appLanguage zh-Hans
appVersion 1.1.1
appVersionCode 128
appWgtVersion 1.1.1
brand realme
browserName chrome
deviceBrand realme
deviceModel RMX2121
deviceOrientation portrait
devicePixelRatio 3
deviceType phone
errMsg getSystemInfo:ok
language zh-CN
oaid
osAndroidAPILevel 31
osLanguage zh-CN
osName android
osTheme light
osVersion 12
pixelRatio 3
platform android
safeArea.left 0
safeArea.right 360
safeArea.top 36
safeArea.bottom 784
safeArea.width 360
safeArea.height 748
safeAreaInsets.top 36
safeAreaInsets.right 0
safeAreaInsets.bottom 0
safeAreaInsets.left 0
screenHeight 784
screenWidth 360
statusBarHeight 36
system Android 12
theme light
uniCompileVersion 3.99
uniPlatform app
uniRuntimeVersion 3.99
version 1.9.9.81993
windowHeight 784
windowWidth 360

取消了安全区域安卓底部仍然有白色区域 2021年就有社区的帖子了
所以至今为止官方优化了吗?咱就是说uniapp已经是版本弃子了吗···· 社区大大们有什么处理方法吗?
希望动态修改适配暗色模式(主要是没有动态修改窗口背景颜色的方法)


10 回复

或者有没有什么办法可以单独在安全区域搞一个元素覆盖掉


蹲一个解决办法

安卓底部安全区,各家厂商都不一样,只能自己去做适配了

已经解决了~~

不用一个个适配

回复 南黎2024: 咋解决的,求贴一下代码,谢谢

回复 南黎2024: 老哥讲下怎么弄得

怎么解决的大佬

我的解决方法是不用官方的底部导航栏```自己手搓一个 控制位置`````

在处理uni-app中安卓设备的底部安全区域时,通常是为了适配不同安卓设备的刘海屏、水滴屏或全面屏,确保页面内容不被系统UI遮挡。uni-app提供了一些内置的方法和环境变量来帮助我们处理这个问题。以下是如何在uni-app中处理安卓底部安全区域的代码示例。

1. 使用env对象获取安全区域信息

uni-app提供了env对象,其中包含safeAreaInsets属性,可以获取到安全区域的上下左右边距。

// 在页面的onReady或onLoad生命周期中获取安全区域信息
onReady() {
    const safeAreaInsets = uni.getSystemInfoSync().safeAreaInsets;
    console.log('Safe Area Insets:', safeAreaInsets);

    // 假设我们只关心底部的安全区域高度
    const bottomSafeArea = safeAreaInsets.bottom;
    // 可以根据bottomSafeArea调整页面布局
}

2. 在样式中使用环境变量

可以在页面的样式中,通过条件编译或直接在样式中引入环境变量来处理底部安全区域。

/* 在页面的样式文件中 */
page {
    padding-bottom: calc(env(safe-area-inset-bottom) + constant(safe-area-inset-bottom));
}

/* 注意:calc和env/constant的结合使用是为了兼容不同版本的iOS和Android */

3. 动态调整页面布局

如果需要在JavaScript中动态调整布局,可以结合Vue的数据绑定和样式绑定。

<template>
    <view class="container" :style="{paddingBottom: bottomSafeArea + 'px'}">
        <!-- 页面内容 -->
    </view>
</template>

<script>
export default {
    data() {
        return {
            bottomSafeArea: 0
        };
    },
    onReady() {
        const safeAreaInsets = uni.getSystemInfoSync().safeAreaInsets;
        this.bottomSafeArea = safeAreaInsets.bottom;
    }
};
</script>

<style>
.container {
    /* 其他样式 */
}
</style>

4. 注意事项

  • 不同的安卓设备可能有不同的安全区域大小,因此处理时需要动态获取。
  • 在某些情况下,可能需要结合window.innerHeightwindow.innerWidth来更精确地调整布局。
  • 考虑到兼容性问题,可以同时使用env()constant()函数来获取安全区域信息,因为不同版本的iOS和Android对这两个函数的支持情况不同。

通过上述方法,你可以有效地处理uni-app在安卓设备上的底部安全区域问题,确保应用在不同设备上都能有良好的用户体验。

回到顶部