Android 沉浸式(透明)状态栏细研-超级细还附 Demo

本文详细探讨了Android沉浸式状态栏的实现,包括透明状态栏、状态栏主题切换、Navigation Bar配色调整以及修复DrawerLayout顶部白边问题。提供了一个名为AndroidBarUtils的工具类,适用于各种Android版本,旨在提升App用户体验。
摘要由CSDN通过智能技术生成

图片来自(Joe Birch)

前言

在 Android 4.4 中引入了沉浸模式的功能,但这个版本非真正的沉浸模式,应该说是透明模式。Android 5.0 以后才可以在系统层面实现真正的沉浸式状态栏。
沉浸式状态栏是为了与当前使用的 App 页面风格统一,不会显的那么突兀,保持友好且一致的用户体验而设计,是现在主流 App 必备的适配内容。今天我们就细细的研究一下沉浸式状态栏的适配。

先看效果

实现的功能

  • 真透明状态栏(个别机型无法适配全透明,如锤子)
  • 动态改变 ToolBar 或者自定义的 TitleBar 颜色,修改背景色即可,不需要动态改变状态栏颜色
  • 状态栏主题模式(黑/白色)切换
  • 修复适配 DrawerLayout 在 4.4 上白边的问题
  • 适配“刘海屏”上的沉浸式状态栏
  • 导航栏实现个人认为美观并通配的配色,可自定义修改

看实现代码

状态栏设置为透明

/**
 * 设置透明StatusBar
 *
 * @param activity Activity
 */
private static void setTranslucentStatusBar(Activity activity) {
   
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
   
        return;
    }
    Window window = activity.getWindow();
    //透明状态栏
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   
        //5.0及以上版本,创建 Navigation Bar
        createNavBar(activity);
    } else {
   
        //4.4 版本设置为透明状态栏
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
}

切换状态栏主题

这里主要是为了更好的适配页面背景,因为有的页面适合白色的状态栏图标,有的适合黑色的状态栏图标

/**
 * Android 6.0使用原始的主题适配
 *
 * @param activity Activity
 * @param darkMode 是否是黑色模式
 */
public static void setBarDarkMode(Activity activity, boolean darkMode) {
   
    Window window = activity.getWindow();
    if (window == null) {
   
        return;
    }
    //设置StatusBar模式
    if (darkMode) {
   //黑色模式
        if (Build
要在 mediasoup-demo-android-master 中添加 flexfec 代码,您可以按照以下步骤进行: 1. 在 mediasoup-client-android 库中添加 flexfec 相关的代码。具体来说,需要修改 mediasoup-client-android 库中的 webrtc 相关代码,以支持 flexfec。这个过程比较复杂,需要有一定的开发经验和技能。 2. 将修改后的 mediasoup-client-android 库作为依赖项引入 mediasoup-demo-android-master 应用中。在 mediasoup-demo-android-master 的 build.gradle 文件中添加以下代码: ``` dependencies { implementation project(':mediasoup-client-android') } ``` 3. 在代码中使用新的 mediasoup-client-android 库中的 flexfec 相关的 API。具体来说,您需要在 mediasoup-demo-android-master 应用中的 PeerConnectionManager 类中添加以下代码: ``` private void enableFlexfec() { PeerConnectionFactory.Options options = new PeerConnectionFactory.Options(); options.disableEncryption = true; options.disableNetworkMonitor = true; options.enableDtlsSrtp = true; options.useMediaTransport = true; options.enableRtpDataChannel = true; options.flexfecEnabled = true; // enable flexfec factory = PeerConnectionFactory.builder() .setOptions(options) .createPeerConnectionFactory(); } ``` 这个方法将启用 flexfec,您可以将其调用添加到合适的位置。 4. 在 mediasoup-demo-android-master 应用中添加 flexfec 相关的 UI。这个过程包括添加一个开关按钮,以启用或禁用 flexfec,以及在界面上显示 flexfec 相关的统计信息。具体来说,您需要在 mediasoup-demo-android-master 应用中的 CallActivity 类中添加以下代码: ``` private void updateFlexfecEnabled(boolean enabled) { peerConnectionManager.setFlexfecEnabled(enabled); } private void showFlexfecStats() { // show flexfec stats } ``` 这些方法将分别处理开关按钮和统计信息的显示。 需要注意的是,上述步骤需要一定的开发经验和技能。如果您不熟悉 Android 开发和 WebRTC 技术,建议先学习相关知识再进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZeroFlutter

感谢支持,请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值