关于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下一并全部设置完成
相关推荐
@@神农3 分钟前
maven的概述以及在mac安装配置
java·macos·maven
杜子不疼.8 分钟前
【C++】玩转模板:进阶之路
java·开发语言·c++
夜晚中的人海18 分钟前
【C++】异常介绍
android·java·c++
Le1Yu1 小时前
2025-9-28学习笔记
java·笔记·学习
C++chaofan1 小时前
项目中为AI添加对话记忆
java·数据结构·人工智能·redis·缓存·个人开发·caffeine
老华带你飞1 小时前
机电公司管理小程序|基于微信小程序的机电公司管理小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·微信小程序·小程序·机电公司管理小程序
拾忆,想起1 小时前
AMQP协议深度解析:消息队列背后的通信魔法
java·开发语言·spring boot·后端·spring cloud
PH = 72 小时前
Spring Ai Alibaba开发指南
java·后端·spring
涛声依旧2 小时前
基于springBoot鲜花商城小程序
java·spring·微信小程序
尘埃不入你眼眸3 小时前
服务器安装Java与nginx与nacos
java·服务器·nginx