Android状态栏--实现状态栏全透明
来源:互联网 发布:波利亚计数定理 知乎 编辑:程序博客网 时间:2024/05/16 16:04
一、概述
最近项目中要求实现一个状态栏全透明的效果,先来两张效果图。
首页效果图:
其它界面效果图:
如上面两图所示,一个Activity中的两个Fragment的状态栏分别显示不同的效果。
主要思路就是把状态栏变透明,把标题栏弄没。
二、实现
实现方法有两种,一种是在布局中设置,另一种是在代码中设置。
Android4.4以下的系统无法对状态栏进行操作,所以本文针对Android4.4系统和Android5.0及以上系统进行说明。
对于Android4.4系统和Android5.0及以上系统,首先都要先在styles.xml中设置主题样式,先去掉标题栏,要添加以下两行代码:
<item name="windowActionBar">false</item><item name="windowNoTitle">true</item>
我这里直接在默认主题AppTheme中添加了:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item></style>
对于Android4.4系统:
可以新建“values-v19/styles.xml”文件,添加代码:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowTranslucentStatus">true</item></style>
也可以不设置android:windowTranslucentStatus属性为true,改为在Activity中添加以下代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
对于Android5.0及以上系统:
可以新建“values-v21/style.xml”文件,添加代码跟Android4.4系统一样:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowTranslucentStatus">true</item></style>
但是这样显示出来的状态栏是半透明的,要想实现全透明,可以在Activity中进行设置,添加代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(Color.TRANSPARENT); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); }
对于以上这些方法,不能在相关的布局文件中设置fitsSystemWindows为true,不然整个布局会向下移动一个状态栏高度的距离,状态栏还是会显灰白色呈现出来。
三、后记
刚开始写博客,有些不足希望不要在意,并且这篇文章也有很多可以补充的地方,今后有时间可能会补充上去。
在其它界面存在EditText时,点击EditText弹出虚拟键盘后回到首页,又出现了状态栏显灰白色的情况,如下图所示:
解决办法是在AndroidManifest.xml文件中给对应的Activity设置windowSoftInputMode属性值为adjustPan或者adjustNothing即可
后记(二)
Android6.0系统以上可以给状态栏文字颜色改成黑色,代码如下:
public static void setStatusBarMode(Activity activity, boolean bDark) { //6.0以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Window window = activity.getWindow(); View decorView = window.getDecorView(); if (decorView != null) { int vis = decorView.getSystemUiVisibility(); if (bDark) { vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; window.setStatusBarColor(activity.getResources().getColor(R.color.white)); } else { vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; window.setStatusBarColor(activity.getResources() .getColor(R.color.colorPrimaryDark)); } decorView.setSystemUiVisibility(vis); } } }
添加View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR属性就能使状态栏文字颜色变黑,移除变回原样
- Android状态栏--实现状态栏全透明
- android 全透明状态栏
- android 全透明状态栏
- android 状态栏全透明
- Android全透明状态栏
- android全透明状态栏
- Android 透明状态栏实现
- Android实现透明状态栏
- android实现透明状态栏
- Android 透明状态栏实现
- android 全透明式状态栏
- Android 状态栏全透明策略
- Android透明状态栏的实现
- Android 透明状态栏实现方案
- Android5.0实现全透明状态栏效果
- 全透明状态栏效果
- Android状态栏、导航栏全透明
- android 透明状态栏,沉浸状态栏
- 严蔚敏版数据结构学习笔记和代码实现
- Get list of widgets for QGuiApplication----stackoverflow
- 两个链式存储的一元多项式乘法运算算法
- php中正则表达式
- 经验:搞代码就行了,别乱动数据库(【测试数据要尽量写好一点,只改不删,后期不要轻易删表记录】。关联复杂。oracle报错难以解决)==教训经历如下:
- Android状态栏--实现状态栏全透明
- 判断一个二维数组里面是否含有一个整数
- C
- layui select动态添加option
- Maven之(七)pom.xml配置文件详解
- Callable实现带有返回值的线程
- 数据结构实验之二叉树五:层序遍历
- Android 判断通知栏权限的问题
- Xrecycleview加载刷新使用