当前位置: 首页 > news >正文

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

推荐: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.lryc.cn/news/463998.html

相关文章:

  • 用自己的数据集复现YOLOv5
  • 如何在博客中插入其他的博客链接(超简单)最新版
  • JS通过递归函数来剔除树结构特定节点
  • javayufa
  • 软考-高级系统分析师知识点-补充篇
  • JavaScript全面指南(四)
  • 2024年诺贝尔物理学奖的创新之举
  • FileLink内外网文件交换——致力企业高效安全文件共享
  • 使用Python在Jupyter Notebook中显示Markdown文本
  • G1 GAN生成MNIST手写数字图像
  • WPFDeveloper正式版发布
  • 实现鼠标经过某个元素时弹出提示框(通常称为“工具提示”或“悬浮提示”)
  • 【GAMES101笔记速查——Lecture 17 Materials and Appearances】
  • 对于从vscode ssh到virtualBox的timeout记录
  • 鸿蒙原生应用扬帆起航
  • 《计算机视觉》—— 表情识别
  • NVIDIA Aerial Omniverse
  • QT程序报错解决方案:Cannot queue arguments of type ‘QTextCharFormat‘ 或 ‘QTextCursor‘
  • MySQL知识点_03
  • leetcode:744. 寻找比目标字母大的最小字母(python3解法)
  • 2015年-2016年 软件工程程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析
  • 整理一下实际开发和工作中Git工具的使用 (持续更新中)
  • Axios 的基本使用与 Fetch 的比较、在 Vue 项目中使用 Axios 的最佳实践
  • Dockerfile样例
  • MYSQL-多表查询
  • MySQL改密码后不生效问题
  • 15分钟学Go 第1天:Go语言简介与特点
  • UDP/TCP协议
  • gitee建立/取消关联仓库
  • 在 Windows 环境下,Git 默认会自动处理 CRLF 和 LF 之间的转换。