Android 设置特定Activity内容顶部显示在状态栏底部,也就是状态栏的下层 以及封装一个方法修改状态栏颜色

embedded/2024/10/23 3:51:26/

推荐:https://github.com/gyf-dev/ImmersionBar

在 Android 中要实现特定 Activity 内容顶部显示在状态栏底部以及封装方法修改状态栏颜色,可以通过以下步骤来完成:

一、让 Activity 内容显示在状态栏底部

  1. 在 AndroidManifest.xml 文件中,为特定的 Activity 设置主题,主题中可以设置窗口属性,使得状态栏透明: 
<activity android:name=".YourActivity"android:theme="@style/TransparentStatusBarTheme">
</activity>

创建一个主题样式文件 styles.xml(如果已有则在其中添加):
 

<style name="TransparentStatusBarTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowTranslucentStatus">true</item>
</style>

 Activity 的布局文件根布局中设置 fitsSystemWindows 属性为 true,这样可以让布局适应系统窗口,包括状态栏: 
 

  1. 在 Activity 的 onCreate 方法中,通过代码设置状态栏透明:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);
}

二、封装修改状态栏颜色的方法

  1. 创建一个工具类 StatusBarUtils: 

public class StatusBarUtils {public static void setStatusBarColor(Activity activity, int color) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = activity.getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(color);}}
}

  1. 在需要修改状态栏颜色的地方调用这个方法:

StatusBarUtils.setStatusBarColor(this, Color.RED); // 将状态栏颜色设置为红色

通过以上步骤,就可以实现特定 Activity 内容顶部显示在状态栏底部,并可以方便地通过封装的方法修改状态栏颜色。


import android.app.Activity;
import android.os.Build;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;public class StatusBarUtils {/*** StatusBarUtils.setStatusBarColor(this, Color.RED); // 将状态栏颜色设置为红色*/public static void setStatusBarColor(Activity activity, int statusBarBgcolor, boolean isLightStatus) {Window window = activity.getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(statusBarBgcolor);View decorView = window.getDecorView();int flags = decorView.getSystemUiVisibility();if (isLightStatus) {// 设置为浅色模式(黑色文字)flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;} else {// 设置为深色模式(白色文字)flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;}decorView.setSystemUiVisibility(flags);}/*** 判断当前活动的状态栏是否为浅色。** @param activity 活动实例* @return 如果状态栏为浅色,返回 true;否则返回 false。*/private static boolean isLightStatusBar(Activity activity) {try {View decorView = activity.getWindow().getDecorView();int flags = decorView.getSystemUiVisibility();return (flags & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) != 0;} catch (Exception e) {e.printStackTrace();return false;}}private static void setLightStatusBar(Activity activity, boolean isLightStatus) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isLightStatus != isLightStatusBar(activity)) {View decorView = activity.getWindow().getDecorView();int flags = decorView.getSystemUiVisibility();if (isLightStatus) {flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;} else {flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;}decorView.setSystemUiVisibility(flags);}}}


http://www.ppmy.cn/embedded/129728.html

相关文章

#MySQL `SELECT` 语句执行流程详解

在数据库操作中&#xff0c;MySQL 的 SELECT 语句是用于查询数据最常见的 SQL 语句之一。理解它的执行流程对数据库优化和性能提升具有至关重要的意义。本文将详细解析 SELECT 语句从发出请求到返回结果的每个步骤&#xff0c;并结合 MySQL 的架构为您提供深度理解。 ## 1. 连接…

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

MySQL-多表查询

子查询[分步走] 1:一个sql的查询结果当做另一个sql的查询条件. 2:内层的那个sql语句要先执行 sql -- todo --------------子查询---(嵌套查询)--------------- -- 例如&#xff0c;使用命令完成&#xff1a; -- &#xff08;1&#xff09;使用数据库班级db_product3下的商品表和…

【Linux】总线-设备-驱动模型

背景 前面&#xff0c;我们介绍了写驱动代码的一些常规步骤&#xff0c;并且也写了最基本的驱动代码&#xff0c;但是那些代码存在着问题&#xff0c;我们将硬件的信息都写进了驱动里了&#xff0c;如果我们在杂项设备驱动中控制led&#xff0c;那么会在硬件操作接口中包含硬件…

Spring Cloud微服务技术选型指南

Spring Cloud微服务技术选型指南 随着软件架构从单体应用向微服务转变&#xff0c;Spring Cloud作为一种强大的微服务架构开发工具被广泛采用。它提供了一系列组件和工具来简化微服务架构的开发、部署和管理。本博客将探讨Spring Cloud微服务技术选型的各个方面&#xff0c;帮…

Java基于SSM框架的教学辅助微信小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Vscode的远程开发之VScode优势(一)

一、VSCode 优势 时代的弄潮儿 vscode是微软开源的基于electron的编辑器&#xff0c;通过各种各样的插件&#xff0c;它能够变成你最花里胡哨的IDE。 vscode 最大的特点与优势就是它将Server与Client解耦&#xff1a; 作为Client的vscode&#xff0c;他只负责作为文本编辑器…

apifox发送请求,参数类型为枚举类

背景 使用apifox模拟前端发送请求时&#xff0c;对于string、int等基本类型直接选择就ok了&#xff0c;但是后端controller的参数是枚举类的时候&#xff0c;我就有点蒙了&#xff0c;不知道应该发送什么过去&#xff0c;apifox也不可能有咱们自定义的枚举类 解决 实际上&am…