关于Google Pixel,或者安卓16,状态栏颜色无法修改的解决方案

场景

  • 谷哥手机pixel等原生安卓16的系统的状态栏异常显示,无法修改颜色

获取title布局(示例)

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_parent_head"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="horizontal">
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/layout_head"
        android:layout_width="match_parent"
        android:layout_height="@dimen/layout_include_title_height"
        android:background="#ffffff"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/back"
            android:layout_width="18dp"
            android:layout_height="26dp"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:background="@drawable/bg_back_title_selector" />
        <TextView
            android:id="@+id/start_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:textSize="14sp"
            android:textColor="@color/main_color"
            android:layout_marginStart="10dp"
            android:visibility="gone" />
        <TextView
            android:id="@+id/head_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_weight="1"
            android:ellipsize="end"
            android:layout_gravity="center"
            android:gravity="center"
            android:singleLine="true"
            android:text="@string/Tirepressure_detection"
            android:textColor="@color/main_color"
            android:textSize="16sp" />
        <ImageView
            android:id="@+id/right_img"
            android:layout_width="36dp"
            android:layout_height="40dp"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="8dp"
            android:padding="5dp"
            android:src="@drawable/title_setting"
            android:visibility="invisible" />

        <ImageButton
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="8dp"
            android:background="@null"
            android:src="@drawable/exchange"
            android:visibility="gone" />

        <TextView
            android:id="@+id/right_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="8dp"
            android:gravity="center"
            android:text="@string/send1"
            android:layout_gravity="end|center_vertical"
            android:textColor="@color/main_color"
            android:textSize="14sp"
            android:visibility="gone" />

        <TextView
            android:layout_width="56dp"
            android:layout_height="40dp"
            android:layout_marginRight="8dp"
            android:gravity="center"
            android:text="@string/send1"
            android:textColor="@color/main_color"
            android:textSize="14sp"
            android:visibility="gone" />
    </FrameLayout>
</FrameLayout>

其中将标题布局包裹在一个FrameLayout里,然后主题里不进行任何状态栏颜色的配置。

使用第三方库或其他安卓原生api获取状态栏高度,手动设置被包裹视图的marginTop。

然后状态栏颜色可以直接用上面布局的FrameLayout背景色控制。如需调整状态栏文字颜色,使用原生api切换白色黑色即可。

此操作适配安卓所有版本。

当然关于Activity的window,需要去除TRANSLATG,FULLSCREEN的flag

java 复制代码
window.clearFlag(
    WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
)

,布局以及主题也无需设置

xml 复制代码
fitsytemWindow="true"

让状态栏由你自己来托管。

缺点

  • 全屏和非全屏,状态栏需要手动控制
  • 如果xml布局不规则,需要手动修改的地方多

优点

  • 简单粗暴
  • 对于结构好的项目,可以在BaseActivity下一并全部设置完成
相关推荐
疯狂打码的少年4 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
Mr数据杨6 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
2601_962056236 小时前
Spring Boot 入门 与 无法解析符号 springframework 的解决
java·spring boot·后端
●VON6 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
Thomas21436 小时前
Java scala 数组 链表
java·链表·scala
刃神太酷啦6 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
里欧跑得慢6 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
亚历克斯神6 小时前
低代码与 AI 的融合趋势——从可视化搭建到自然语言生成应用
java·spring·微服务
IT毕设实战小研7 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
学长毕业设计7 小时前
基于SpringBoot的瑜伽馆网站的设计与实现(源码+文档+讲解视频)
java·spring boot·后端