透明状态栏设置

Android 设置全屏沉浸式透明状态栏的工具类(超级简单,两步实现) 用法:    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(ge 阅读详情
  • 要在Activity中使用 Translucent System Bar 特性,首先需要到AndroidManifest中为指定的Activity设置Theme。但是需要注意的是,我们不能直接在values/style.xml直接去自定义 Translucet System Bar 的Theme,因为改特性仅兼容 Android 4.4 开始的平台,所以直接在values/style.xml声明引入,工程会报错。有些开发者朋友会在代码中去判断SDK的版本,然后再用代码设置Theme。虽然同样可以实现效果,但个人并不推崇这种做法。我所采取的方法则是建立多个SDK版本的values文件夹,系统会根据SDK的版本选择合适的Theme进行设置。大家可以看到上面我的工程里面有values、values-v19、values-v21。

第一种方式

第一种方式,需要做下面三步设置

1、在values、values-v19、values-v21的style.xml都设置一个 Translucent System Bar 风格的Theme

values/style.xml

<style name="ImageTranslucentTheme" parent="AppTheme">
    <!--在Android 4.4之前的版本上运行,直接跟随系统主题-->
</style>

values-v19/style.xml

<style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

values-v21/style.xml

<style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

上面需要注意的地方是,无论你在哪个SDK版本的values目录下,设置了主题,都应该在最基本的values下设置一个同名的主题。这样才能确保你的app能够正常运行在 Android 4.4 以下的设备。否则,肯定会报找不到Theme的错误。

2、在AndroidManifest.xml中对指定Activity的theme进行设置

<activity
    android:name=".ui.ImageTranslucentBarActivity"
    android:label="@string/image_translucent_bar"
    android:theme="@style/ImageTranslucentTheme" />

3、在Activity的布局文件中设置背景图片,同时,需要把android:fitsSystemWindows设置为true

activity_image_translucent_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/env_bg"
    android:fitsSystemWindows="true">

</RelativeLayout>

到此,第一种实现方式完成,大家可以看看下面的效果


ImageTranslucentTheme效果

就跟中华万年历的天气预报效果界面一样,系统的整个导航栏都融入了app的界面中,背景图片填满了整个屏幕,看起来舒服很多。这里还有一个android:fitsSystemWindows设置需要注意的地方,后面会在细讲。接下来看第二种实现。

方式二

相比中华万年历,QQ音乐采用的是另外一种实现的方式,它将app的Tab栏和系统导航栏分开来设置。


QQ音乐效果风格

由于它的Tab栏是纯色的,所以只要把系统通知栏的颜色设置和Tab栏的颜色一致即可,实现上相比方法一要简单很多。同样要到不同SDK版本的values下,创建一个同名的theme,在values-v21下,需要设置系统导航栏的颜色:

values-v21/style.xml

<style name="ColorTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:statusBarColor">@color/color_31c27c</item>
</style>

再到ColorTranslucentBarActivity的布局文件activity_color_translucent_bar.xml中设置Tab栏的颜色

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:background="@color/color_31c27c">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="QQ Music"
            android:textColor="@android:color/white"
            android:textSize="20sp" />

    </RelativeLayout>
</LinearLayout>

到此,我们就可以得到和QQ音乐主界面一样的效果了。


QQ音乐界面实现效果

到此,就大体介绍完了 Translucent System Bar 的两种实现方式了。

android:fitsSystemWindows的“踩坑”

通过前面的两种方式,大家估计会留意到一个地方,就是所有实现 Translucent System Bar 效果的Activity,都需要在根布局里设置 android:fitsSystemWindows="true" 。设置了该属性的作用在于,不会让系统导航栏和我们app的UI重叠,导致交互问题。这样说可能比较抽象,看看下面两个效果图的对比就知道了。


有fitsSystemWindows设置

没有fitsSystemWindows设置

注:上面的演示效果,是借助了我的另一个开源项目,详情请戳:AndroidAlbum

这样的话,如果我有10个Activity要实现这种效果,就要在10个布局文件中做设置,非常麻烦。所以,想到一种方法,在theme中加上如下的android:fitsSystemWindows设置:

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

发现果真可以了。所有要实现 Translucent System Bar 的Activity,只需要设置了这个theme即可,改起来也很方便。可惜,后来出现了一个BUG,让我还是得老老实实的回去布局文件中设置。


Toast文字错位

Toast打印出来的文字都往上偏移了。这里也是我疏忽的地方,因为在布局文件中设置是对View生效,而到了theme进行设置则是对Window生效了,两者在实现上就不一样了。所以,最终只能改回原来的方式去实现。

实践总结

最后做一下小小的总结:

  • 方式一适用于app中没有导航栏,且整体的背景是一张图片的界面;
  • 方式二适用于app中导航栏颜色为纯色的界面;
  • android:fitsSystemWindows设置要在布局文件中,不要到theme中设置;



之前的App中也用了Translucent System Bar。遇到两个坑:
1. fitSystemWindow的问题,不光Activity要设置,包含的Fragment的布局也需要设置fitSystemWindow=true。
2. 4.4上是渐变色的Statusbar,5.0上是完全透明,6.0上又是半透明。下次试试你提到的android:statusBarColor。

还有目前没有解的一个问题,Statusbar上的文字颜色。目前没有找到方法能改。系统默认白色时如果图片又是白色体验就不好。

所以最后还是放弃使用Translucent System Bar了。

Android设置透明状态栏以及隐藏状态栏 在很多情况下,我们都需要让项目的某个界面状态栏设置为透明或者直接隐藏起来,这样使我们的界面看起来整体美观大方一些。下面来给大家演示一下如何将Android状态栏设置为透明或者将状态栏隐藏起来。... 阅读详情

相关推荐

常用的数据结构以及常用的算法

常用的数据结构以及常用的算法 常用数据结构 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 数据结构往往同高效的检索算法和索引技术有关。 一、线性表 线性结构: 最常用、最简单的一种数据结构。 线性表: 典型的线性结构。基本特点是线性表中的 数据元素有序且有限。结构中: ① 存在一个唯一的被称为“第一个”的数据元素; ② 存在一个唯一的被称为“最后一个”的数据元素; ③ 除第一个元素外,每

qq_47605698的博客 1450

Android windowTranslucentStatus属性源码分析

简介 我们在设置系统样式时,将windowTranslucentStatus和windowTranslucentNavigation属性设置为true后,Activity就会显示为如下效果: 状态栏和导航栏都会显示成半透明的状态。并且布局会拓展到系统栏的后面。本文就是要从源码分析windowTranslucentStatus的实现原理。因为windowTranslucentNavigati...

张小强的专栏 8117

Ultrascale/Ultrascale+ FPGA GTH IP及结构详解(一)

FPGA GTH Transceiver

houzi6320的博客 1万+

Android状态栏详解(全网最详)

啊

一只特立独行的猪 2万+

Jetson编译安装pycuda

可使用nvcc --version查看是否有信息输出,若没有,且安装cuda的情况下,需要手动将CUDA 的路径添加到环境变量中。编译生成_pvt_struct.cpython-38-aarch64-linux-gnu.so文件。基于jetson orin nano jetpack512模块上安装pycuda。4、获取pycuda源码(版本根据实际情况获取)2、进入conda环境并安装cuda工具包。9、若未检测出来需要清除并强制编译。7、编译成功后安装pycuda。5、配置编译并设置环境变量。

qq_48175141的博客 972

MATLAB新手也能懂:用MATPOWER 8.0b搞定电力系统潮流计算(附case9实战代码)

本文详细介绍了如何使用MATPOWER 8.0b在MATLAB中进行电力系统潮流计算,特别适合新手入门。通过case9实战案例,讲解了从安装配置到运行牛顿-拉夫逊法潮流计算的全过程,包括结果分析和常见问题处理,帮助读者快速掌握这一电力系统分析的核心技能。

weixin_26757925的博客 381

Android中windowTranslucentStatus与windowTranslucentNavigation的一些设置

在iOS中,你可能发现页面会整体拉升到状态栏,整个页面效果就会显得更加的高端大气上档次,在Android4.4以后其实也有这种效果的实现,下面我就说一下在进行这种效果实现时碰到的一些坑,希望对大家有一些帮助吧。 首先来说一下关于这种效果的一些额外设置: windowActionBar:这个应该大家都知道,在自定义的Theme中设置成false,就没有系统默认的那个菜单选项了。 windowN

zjt593688的博客 3万+

群晖存储空间损毁不等于硬盘损坏:排查与修复实战

NAS存储系统中,物理硬盘、存储池与文件系统空间构成层级结构,任何一层出现异常都可能在管理界面汇总为“存储空间损毁”。事实上,异常断电、卷未正常挂载等软性问题也会触发这一红色告警,而存储池和硬盘SMART状态往往完全正常。理解这一机制后,用户无需急于格式化重建,通过事件日志审查、SSH确认挂载状态,再借助btrfs scrub等文件系统自愈工具,即可在数据不丢失的前提下恢复存储空间正常。该方案对家庭及小型办公环境中的群晖NAS尤其适用,特别是在供电不稳或硬盘休眠频繁的场景下,能有效规避误判风险。本文完整记录

weixin_30843121的博客 262

android中的windowTranslucentStatus和fitsSystemWindows的作用

一.Android4.4版本才有windowTranslucentStatus属性,在res文件夹下创建一个新的文件夹value-v19并新建styles.xml文件给activity设置这个style,此时该页面可以拉伸到顶部状态栏,并且定义顶部状态栏透明。二.android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding(paddingTop

u010389391的博客 1万+

手把手教你学Simulink--FIR滤波器的设计与优化仿真

FIR滤波器的设计目标通常包括指定的频率响应特性(如低通、高通、带通或带阻),以及特定的应用需求(如线性相位、最小化误差等)。Simulink提供了一个直观且强大的平台来模拟这些设计,并允许用户通过调整参数实时观察其对系统性能的影响。明确你的系统需求,比如输入信号类型(如正弦波组合)、采样率、FIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通FIR滤波器,用来去除高于1kHz的所有频率成分,保留低于1kHz的信号成分。采样率为8kHz。

MHD0815的博客 347

深度学习论文: Cultivated Land Extraction from High-Resolution Remote Sensing Image

深度学习论文: Cultivated Land Extraction from High-Resolution Remote Sensing Image The Winning Solution to the iFLYTEK Challenge 2021 Cultivated Land Extraction from High-Resolution Remote Sensing Image PDF: https://arxiv.org/pdf/2202.10974.pdf PyTorch代码: https:

mingo_敏 3480

android状态栏(沉浸式状态栏,改变状态栏字体颜色,背景颜色)

通过主题设置状态栏 在API21(android 5.0)之后,设置状态栏透明效果为半透明,并且为了保证在API19(android 4.4)之前的正常使用,所以需要3份不同的style文件。即values-v19(android 4.4之前使用),values-v21(android 5.0以后使用),自带的values(android4.4~android5.0之间使用)。 在res文件下...

一条老狗的博客 1万+

基于深度学习的图像修复系统,GAN图像修复,图像修复算法研究,并实现系统登录和注册,全网独发

近年来,深度学习已成为计算机视觉领域的研究热点,基于深度学习的图像修复技术弥补了传统修复方法长期存在的不足,显著提高了生成结果的质量。深度学习是指模仿人脑机制设计的具有深层结构的神经网络。深度学习作为一种表征学习,通过模仿人脑神经元之间的信息传递方式来学习输入数据的特征,并找到输入和输出数据之间的映射关系。通过在图像修复中应用深度学习技术,可以准确学习图像的语义信息,然后根据信息预测缺失的内容,大大克服了传统修复算法的不足,使结果更具逻辑性。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 8267

Android 设置透明状态栏

【代码】设置透明状态栏。

dengfuma的专栏 461

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android设置透明状态栏、导航栏

在android4.4之前,状态栏一直都是黑色的,在android4.4引入了windowTranslucentStatus属性,使开发者可以实现给状态栏设置颜色,如下图所示:                                                                       实现透明状态栏和导航栏可以通过java代码和设置主题两种方式: 方式一:在代...

Yzw_92_4_11的博客 6141

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android透明状态栏设置

1.在Style.xml文件中设置:<item name="android:windowTranslucentStatus">true</item> //透明的状态栏 <item name="android:windowTranslucentNavigation">true</item>//透明的导航图 <item name="androi...

weixin_30590285的博客 178

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android设置透明状态栏,仿ios状态栏

为什么80%的码农都做不了架构师?>>> ...

weixin_33912638的博客 2268

设置透明状态栏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().addFlags(WindowManager.LayoutPar

u013593071的博客 180

Android设置透明状态栏和透明导航栏

Android透明状态栏只有在4.4之后有。 在代码中加入下面几行代码即可实现 转载于:https://www.cnblogs.com/wangxinqiang1995/p/6604064.html

weixin_33750452的博客 181

android设置透明状态栏

沉浸式状态栏:就是你看视频(横屏)的时候没有状态栏,就算你点击屏幕一下也不会出现状态栏的(需要从上屏幕边缘往下划一下才能出来状态栏),由于不好截屏这里我就不上图了,大家心领神会一下就行了。 透明式状态栏:就式状态栏背景与应用背景相同,这就是*透明状态栏*,如下图博主的手机主界面就是透明状态栏。

爱吃冰淇凌的羊驼 13万+

Android设置透明状态栏

protected void initSystemBar(){ Window window = getWindow(); if (translucentStatusBar()){ // 设置状态栏全透明 if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){

KindSuper_liu的专栏 539

android:ui 设置透明以及theme使用方法,Android全屏与透明状态栏

前言Android沉浸式与全屏是不一样的两种主题,接下来我们看看吧Android实现全屏通过主题属性来实现truetrue#ff00beb4复制代码在AndroidManifest.xml中使用android:theme="@style/FullScreenTheme">复制代码使用全屏的主题android:theme="@android:style/Theme.NoTitleBar.Ful...

weixin_35300493的博客 753

android 状态栏标题栏设置成渐变,Android透明状态栏或者渐变色状态栏

一、透明状态栏:我们应用的正常状态栏都是黑乎乎的,就像下面这样(模拟器版本Android4.4.2): 不好看,我们希望的是向这样的: 这样感觉比黑黑的statusBar好看多了。实现方法:1.去/res/values/styles.xml里找到你activity或者application使用的theme,theme一定要使用NoActionBar的随便一种;2.因为这种效果是Android4.4...

weixin_39784972的博客 718
上一篇: ImgeView通过加载布局,addview宽高无效问题
下一篇: Android 简单实现ListView顶部悬浮效果
下沉的代码
博客等级 码龄12年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值