Android修改状态栏颜色 布局错乱问题解决

原创 2015年11月19日 16:01:19

android修改状态栏颜色 布局错乱问题解决

转载请注明出处(http://blog.csdn.net/ps1397111/article/details/49929045

修改装状态栏颜色需要用的的库
SystemBarTintManager开源库

看一看状态栏变色效果
这里写图片描述

状态栏变色需要的代码,只能在4.4以上的机器上运行,并且必须开启透明主题。

首先是manifest里面activity的theme

        android:theme="@android:style/Theme.Translucent.NoTitleBar" 

这个目的是让布局透明,并隐藏标题栏。

然后在activity里面需要的代码

        //状态栏变色
        if (UenUtils.getSDKVersion() > 18) {
            Window win = getWindow();
            WindowManager.LayoutParams winParams = win.getAttributes();
            final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
            winParams.flags |= bits;
            win.setAttributes(winParams);
           // 创建状态栏的管理实例
           SystemBarTintManager tintManager = new SystemBarTintManager(this);
           // 激活状态栏设置
           tintManager.setStatusBarTintEnabled(true);
           // 激活导航栏设置
//         tintManager.setNavigationBarTintEnabled(true);
           // 设置一个颜色给系统栏
           tintManager.setTintColor(Color.parseColor("#BC1E21"));
        }

讲一讲在开发过程中遇到的问题,首先是在manifest中theme设置为了android:theme="@android:style/Theme.Translucent",但是在模拟器上运行效果没有任何问题,然后在自己的索尼Z3上也没问题,之后在小米note和华为上,发现在手机状态栏和app的title中间是灰色的。之后发现灰色是因为没有设置NoTitleBar属性导致的。之后设置了NoTitleBar,又发现app的title被状态栏挡住了一部分,百思不得其解。最后在网上查了半天解决了问题,在布局中添加一行属性,解决问题。

这里写图片描述

    android:fitsSystemWindows="true" 

这个的实质是 4.x 风格的状态栏半透明。它会把状态栏那一块先蒙上一层半透明的灰色(#66000000)遮罩,再和主要试图区域连在一起,扔给你的 activity。故而你的 actionBar 会上挪到屏幕顶部,修正的方法是在布局 xml 的 root 节点里加入:

android:fitsSystemWindows="true"

即可。如果布局比较复杂的话,简单的 fitsSystemWindows 也许就不能应付需求了,若需要手工计算顶栏(statusBar)的高度,送人送到底我还是贴出来吧:


public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

对应的底部虚拟按键是 android:windowTranslucentNavigation。

顺便mark一下各种theme

android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式

android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏

android:theme="Theme.Light ": 背景为白色

android:theme="Theme.Light.NoTitleBar" : 白色背景并无标题栏

android:theme="Theme.Light.NoTitleBar.Fullscreen" : 白色背景,无标题栏,全屏

android:theme="Theme.Black" : 背景黑色

android:theme="Theme.Black.NoTitleBar" : 黑色背景并无标题栏

android:theme="Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,无标题栏,全屏

android:theme="Theme.Wallpaper" : 用系统桌面为应用程序背景

android:theme="Theme.Wallpaper.NoTitleBar" : 用系统桌面为应用程序背景,且无标题栏

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系统桌面为应用程序背景,无标题栏,全屏

android:theme="Theme.Translucent : 透明背景

android:theme="Theme.Translucent.NoTitleBar" : 透明背景并无标题

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景并无标题,全屏

android:theme="Theme.Panel ": 面板风格显示

android:theme="Theme.Light.Panel" : 平板风格显示

参考:Android 5.0 如何实现将布局的内容延伸到状态栏实?

关于状态栏颜色与官方新Layout对状态栏颜色的自适应更改

第一个颜色值为默认颜色值,会影响到某些官方提供的主题的背景色,如toolbar的默认主题背景色。 第二个颜色值为状态栏默认颜色值,新出的Layout在设置了fitSystemWindow属性后会将状...
  • Greastate
  • Greastate
  • 2016年10月05日 12:54
  • 1172

Android开发技巧——设置系统状态栏颜色

开门见山,先来三张效果图: 然后我们再来讲如何实现以及如何快速地实现。如何实现实现设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上。这是因为,在这个版本以下,没有任...
  • maosidiaoxian
  • maosidiaoxian
  • 2016年06月22日 15:55
  • 38923

解决Android7.0下沉浸式状态栏变灰问题

不知道大家有没有遇到过,应用在android7.0系统以下的手机上运行,沉浸式状态栏是正常的,但是在7.0以上的手机上运行就感觉没有沉浸式了,是分层的。无论怎么修改状态栏背景色都没用。...
  • hmmhhmmhmhhm
  • hmmhhmmhmhhm
  • 2017年09月04日 18:53
  • 2862

android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明

首先我要区分清楚沉浸式状态栏与变色状态栏。沉浸式状态栏指的是,状态栏隐藏,在手指做了相关操作后,状态栏显示出来,例如视频播放器,在播放视频时是隐藏状态栏的,但是点击屏幕的时候,状态栏会显示出来,再例如...
  • u011835956
  • u011835956
  • 2016年03月28日 14:09
  • 22898

沉浸式状态栏颜色设置,对android4.4~6.0的总结

好吧,鸿洋大神已经讲得非常清楚了 http://blog.csdn.net/lmj623565791/article/details/48649563首先,我了解的状态栏颜色设置必须android4...
  • u013147734
  • u013147734
  • 2016年06月02日 16:49
  • 10649

浅谈html中id和name的区别

我们可以通过一段代码来分析一下其中的微妙差别:在IE浏览器里,我们可以通过多少方法来索引到这个文本框对象?(为区别起见,我们把NAME和ID设成了不同的值)...
  • LSSSSSS
  • LSSSSSS
  • 2010年07月22日 17:29
  • 298

【Android L】Material Design低版本实现之【应用主题并且修改状态栏颜色】

在安卓5.0发布以后,界面实在美到爆,状态栏的颜色也可以自定义了。于是乎我就有想法将这一特性引入到我自己的APP中。查了很多资料,为了让5.0以前版本的系统享受到material design,goo...
  • pengjian1993
  • pengjian1993
  • 2015年03月14日 13:34
  • 2040

android 隐藏状态栏和修改状态栏的背景颜色(沉浸式状态栏)

做应用有时候我们需要界面是全屏显示的,也就是没有状态栏的,或者说修改状态栏的背景颜色,让整个屏幕的风格和界面保持一致的(沉浸式?),几行代码轻松搞定! 1、隐藏状态栏 在onCreate方法里面添...
  • baidu_33267166
  • baidu_33267166
  • 2017年07月06日 18:09
  • 316

隐藏状态栏时,整体布局不会往上挪的办法

Launcher开发的时候有个需求是长按图标时,要隐藏状态栏弹出卸载框。但是发现隐藏状态栏的时候workspace会整体往上挪,要想隐藏状态栏时布局不变,需要先在主题属性里加两个属性就好了: ...
  • tangxuankai
  • tangxuankai
  • 2016年03月29日 10:59
  • 956

Android学习第八弹之改变状态栏的颜色使其与APP风格一体化

公众号:smart_android 作者:耿广龙|loonggg 点击“阅读原文”,可查看更多内容和干货 导语:沉浸式状态栏,改变状态栏的颜色使之与APP风格一体化是不是感觉很漂亮,很美?...
  • loongggdroid
  • loongggdroid
  • 2015年08月11日 11:04
  • 56986
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android修改状态栏颜色 布局错乱问题解决
举报原因:
原因补充:

(最多只允许输入30个字)