APP 全屏适配方案

1,157 阅读1分钟

一、背景

APP 和 H5 端一个很大的不同是,APP端打开后是全屏的,沉浸式的体验,去除了浏览器的一些状态栏、搜索栏之类的

二、方案对比

方式一: webview 的加载将顶部手机的状态时间栏空出来, 根据设置不同页面的背景色去设置

优点: 不需要更改h5的内容,只需要动态调整顶部状态栏颜色

缺点: 需要h5内部切换页面即通知native端更改颜色, 而且h5的很多顶部不是纯色,而是带有背景图的,在端内顶部设置背景图实现起来还是比较繁琐的

方式二: webview 将手机顶部时间状态栏全部占满, 在h5页面内部通过paddingtop的方式将内容往下挤,让顶部状态栏的顶部背景空出一个状态栏的高度

优点: 不需要每次都改端内容

缺点: 根据环境调整h5内的空余距离

实现效果如图:

三、代码实现

3-1、ios 端
Native端

设置webview的x y 全部设置为0, 盛满全部屏幕

 self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:config];
H5端

3-2、android 端
Native 端

通过代码设置状态栏,抽离到 utils

StatusBarUtils.kt

import android.app.Activity
import android.graphics.Color
import android.os.Build
import android.view.View
import android.view.WindowManager
class StatusBarUtils {
    companion object {
        fun setTransparentStatusBar(activity: Activity) {
            val window = activity.window
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
                window.decorView.systemUiVisibility =
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
                window.statusBarColor = Color.TRANSPARENT
                window.decorView.systemUiVisibility =
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                            View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR // 设置状态栏文字颜色为黑色
            }
        }
    }
}

页面onCreate时调用

import StatusBarUtils
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    StatusBarUtils.setTransparentStatusBar(this)
}
H5 端代码

设置安卓在webview展示的url不同时, 将上方的导航栏的高度空出来

image.png

image.png