Android 11 SystemUI(状态/导航栏)-图标按键的深浅色

news/2024/11/22 12:43:53/

概述

       自 Android 5.0 版本,Android 带来了沉浸式系统 bar(状态栏和导航栏),Android 的视觉效果进一步提高,各大 app 厂商也在大多数场景上使用沉浸式效果。6.0开始提供了View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR标志位,将状态栏设置为浅色模式, 清除掉这个标志, 可以恢复为深色模式.

引自:Android M如何设置状态栏图标黑白色
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

App调用方法

主题设置加入, 暗灰图标

<item name="android:windowLightStatusBar">true</item>

代码中实现切换

public static void changeStatusBarContrastStyle(Window window, Boolean lightIcons) {View decorView = window.getDecorView();if (lightIcons) {// Draw light icons on a dark background colordecorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);} else {// Draw dark icons on a light background colordecorView.setSystemUiVisibility(decorView.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}

需要更高SDK支持:

//icon color -> black  
activity.getWindow().getDecorView().getWindowInsetsController().setSystemBarsAppearance(APPEARANCE_LIGHT_STATUS_BARS, APPEARANCE_LIGHT_STATUS_BARS);//icon color -> white
activity.getWindow().getDecorView().getWindowInsetsController().setSystemBarsAppearance(0, APPEARANCE_LIGHT_STATUS_BARS);

色调变化流程

frameworks/base/core/java/android/view/View.java

    @Deprecatedpublic void setSystemUiVisibility(int visibility) {if (visibility != mSystemUiVisibility) {mSystemUiVisibility = visibility;if (mParent != null && mAttachInfo != null && !mAttachInfo.mRecomputeGlobalAttributes) {mParent.recomputeViewAttributes(this);}}}

frameworks/base/core/java/android/view/ViewRootImpl.java

    @Overridepublic void recomputeViewAttributes(View child) {checkThread();if (mView == child) {mAttachInfo.mRecomputeGlobalAttributes = true;if (!mWillDrawSoon) {scheduleTraversals();}}}

frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java

    int updateSystemUiVisibilityLw() {//...Ignore....mHandler.post(() -> {StatusBarManagerInternal statusBar = getStatusBarManagerInternal();if (statusBar != null) {final int displayId = getDisplayId();statusBar.setDisableFlags(displayId, visibility & StatusBarManager.DISABLE_MASK,cause);if (transientState.first.length > 0) {statusBar.showTransient(displayId, transientState.first);}if (transientState.second.length > 0) {statusBar.abortTransient(displayId, transientState.second);}statusBar.onSystemBarAppearanceChanged(displayId, appearance,appearanceRegions, isNavbarColorManagedByIme);statusBar.topAppWindowChanged(displayId, isFullscreen, isImmersive);// TODO(b/118118435): Remove this after removing system UI visibilities.synchronized (mLock) {mDisplayContent.statusBarVisibilityChanged(visibility & ~(View.STATUS_BAR_UNHIDE | View.NAVIGATION_BAR_UNHIDE));}}});return diff;}

SystemUI中的流程简单梳理下:
在这里插入图片描述

参考

Android statusbar icons color
[ANDROID] 狀態欄(STATUS BAR)文字與圖示轉換成灰色
Android 系统 Bar 沉浸式完美兼容方案
全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现


http://www.ppmy.cn/news/10494.html

相关文章

html5的几种新特性

前言 为了更好地处理今天的互联网应用&#xff0c;HTML5添加了很多新元素及功能&#xff0c;比如: 图形的绘制&#xff0c;多媒体内容&#xff0c;更好的页面结构&#xff0c;更好的形式 处理&#xff0c;和几个api拖放元素&#xff0c;定位&#xff0c;包括网页 应用程序缓存&…

算法_杨氏矩阵_杨氏矩阵算法_剑指offer

目录 一、问题描述 二、问题分析 三、算法设计 ​四、代码实现 一、问题描述 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N);…

windows下mmclassification安装教程

文章目录mmclassification版本0.23.1一.官方安转教程二.安装教程mmclassification版本0.23.1 一.官方安转教程 官网 二.安装教程 创建conda环境 conda create --name openmmlab python3.8 -y进入创建的环境 conda activate openmmlab安转pytorcch conda install pytorch torc…

Linux——信号知识归纳(上)

一.信号概念&#xff08;一&#xff09;.大致认识信号是操作系统控制进程的一种方式&#xff0c;比如ctrl C、栈溢出程序崩溃、kill -9命令等底层都是操作系统发送信号给进程执行特定操作。因此&#xff0c;所有信号就底层而言都是操作系统发出的。同时&#xff0c;进程接收到信…

自动化测试Seleniums~2

webdriver API 1.如何打开网页以及如何关闭一个浏览器。 package test_20230107;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver;import static java.lang.Thread.sleep;public class Test {public static void main(String[] args)…

把mac验证开展下去

有一段时间&#xff0c;我疯狂发了很多邮件。 觉得都非常具有逻辑性&#xff0c;而且也非常有意义。 但是却没有被执行。 我很失落。 其实别人也说了&#xff0c;这个很好。会参考。 仅此而已。 有一次我提了&#xff0c;有一个模板&#xff0c;一个结果&#xff0c;只要做…

Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

facenet_face_regonistant 完整代码下载地址&#xff1a;Python实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库 利用facenet实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库&#xff0c;此外利用post提交一个新图片&#xff08;也可以提交一个…

(强制)类型转换方法

目录 一、C语言中的类型转换 二、C中的强制类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 2.5 总结 一、C语言中的类型转换 在C语言中&#xff0c;若赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或…