android ~KITKAT 与LOLLIPOP 状态栏背景色 ~学渣带你系列(原创)

已经2017年了。到现在为止 相信各位android开发工程师们已经做过了很多的app. 肯定会遇到过状态栏背景色的问题。 各个版本的问题怎么去考虑 (主要是 4.4 5. 0 ), 你会说 现在2017年了 还会有4.4吗。 很遗憾 还是有20%左右。 所以 还是要考虑兼用的问题。 好吧 让我们开始正题

(先整明白几种概念)
1 全屏状态 :默认不显示状态栏,下拉才有状态栏
2.沉浸模式 :状态栏仍然一直存在,只不过背景颜色设为透明之后,布局向上填充了 。这种情况下如果在根布局中加入Android:fitsSystemWindows=”true”这个配置,布局就不会向上填充,而是把布局的背景色填充到状态栏背景区域。

3.变色龙模式 :状态栏仍然一直存在,只不过背景颜色改变了,这种情况状态栏只是颜色改变了,并不会被布局填充。

通俗的讲就是5.0之前的我们用的沉浸式SystemBarTintManager 这个东西只是布局的颜色被填充了,布局的结构没有变动,当然前提是 你的背景先要设置透明
之后的可以用变色龙模式 我们可以主动设置颜色。也就是5.0以后的方法

当然SystemBarTintManager 这种方法对5.0也有效,并且5.0中单独使用代码或者主题设置都可以实现。但4.4系统必须在应用中res目录下创建values-v19文件夹并新建一个style文件,然后在文件中添加主题并且同事使用SystemBarTintManager 代码并且同事设置沉浸式才能修改状态栏颜色成功。
<pre>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

<item name="android:windowTranslucentStatus">true</item>
</style>
这个也就是意味着你必须要添加的属性。 在4.4 如果你不弄成透明 没有办法颜色沉浸上去。这个属性作用 下面有效果图
</pre>

里面这句话是重点这个也就是意味着你必须要添加的属性。 在4.4 如果你不弄成透明 没有办法颜色沉浸上去,就是你不设置他本身有这个颜色。 你设置的颜色是沉浸不上去的。

<pre>
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(R.color.red);
并且需要同事用代码和注意设置才能实现,并且只有在设置了沉浸式状态下才可以设置状态栏颜色成功,源码中注释如下:

大概格式 后面详述

</pre>

<pre>
private void initStatusBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
</pre>

在这里引用别人的几句话。
4.4系统可以设置状态栏透明windowTranslucentStatus:
状态栏透明之后下面布局会自动填充到状态栏,可以通过添加一个和状态栏等高的布局来填充并设置颜色。
5.0系统可以直接通过主题设置colorPrimaryDark状态栏颜色,且底部布局不会自动填充

好吧我想我还想要啰嗦一下,下面是你需要知道的。

1 主题

<pre>
这是5.0的方法 有印象即可。后面有详述
<style name="DialogWhenReallyLarge" parent="@style/Theme.AppCompat.DayNight"/>
这个是AppCompatActivity下的
所以在你下面写的
<style name="Theme.Document" parent="@style/DocumentsTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
的时候前面不需要添加android: 类似 android:windowActionBar 这是不对的 这会报错。
</pre>

2 本文用到的主题

<pre>
Theme,AppCompat.DayNight 这个说白了就是可以设置页面模式了 相比以前来说简单了很多。
主要方法
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
另外放置的位置也要在serview之前才能生效。 具体的可以去搜索

</pre>

3 强调几个属性的作用

<pre>

<item name="android:windowTranslucentStatus">false</item>

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

<item name="android:statusBarColor">@android:color/transparent</item>

<item name="android:windowLightStatusBar">true</item>
</pre>

我们下面来用图说话。要不我是不能理解的
先来一个我们设置true

Paste_Image.png

接下来来一个false

Paste_Image.png

第一个属性很明显就是可以拉升到顶部状态栏,并且定义顶部状态栏透明
上面是我手机4.4 做这个必须要新建一个values-v19文件夹
<pre>
<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="Theme.Document.Translucent">
    <item name="android:windowTranslucentStatus">true</item>
</style>

</resources>
</pre>
下面看一下 模拟器5.0
这个是true

Paste_Image.png

这个是false


Paste_Image.png

额还是没有看出来区别 在高的版本因为一些原因没有办法实验。 但是另一个用图修改字体图片的颜色我们是可以肯定的

Paste_Image.png
Paste_Image.png

上面是我盗的图。 你想改变这个颜色 那就只能用false

还有一点 就是想要这个效果要要6.0 api23 之上 这个就是你要注意的地方。

(另外在说点。 这个效果。实际上本人觉得并没有什么用。白色是一个默认值。当然也会有不同的地方,我记得小米的一款手机就是黑色。 所以这个影响不是特别大。并且真的想要好的效果的话,可以考虑透明化。整个替换状态栏。 这个要求是android5.0 这里不做特别说明)

这个颜色变幻时6.0 也就是说低于这个版本没有

<pre>

<item name="android:windowLightStatusBar">true</item>
</pre>
低于5.0 没有

<pre>

<item name="android:statusBarColor">@android:color/transparent</item>  

</pre>

正题开始 首先先要确定手机的版本。4.4需要单写value。5.0以后不需要。他可以直接设置颜色

<pre>

if(Utils.hasLollipop()){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
5.0以后可以用getWindow().setStatusBarColor()自定义状态栏背景色
}
else if(Utils.hasKitKat()){
setTheme(R.style.Theme_Document_Translucent);
}

顾名思义这个是判断两个版本的条件
</pre>
<pre>
public void setUpStatusBar() {
int color = Utils.getStatusBarColor(SettingsActivity.getPrimaryColor(this));
if(Utils.hasLollipop()){
getWindow().setStatusBarColor(color);
这个是满足第一个版本的条件 。5.0以上可以直接设置颜色
}
else if(Utils.hasKitKat()){
SystemBarTintManager systemBarTintManager = new SystemBarTintManager(this);
systemBarTintManager.setTintColor(color);
systemBarTintManager.setStatusBarTintEnabled(true);
这个是低版本的用沉浸式,当然5.0以后也可以用这个
}
}
</pre>

<pre>
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitleTextAppearance(context, R.style.TextAppearance_AppCompat_Widget_ActionBar_Title);
if(Utils.hasKitKat() && !Utils.hasLollipop()) {
((LinearLayout.LayoutParams) mToolbar.getLayoutParams()).setMargins(0, getStatusBarHeight(this), 0, 0);
mToolbar.setPadding(0, getStatusBarHeight(this), 0, 0);
}
setSupportActionBar(mToolbar);

下面这个就是在4.4 不是5的时候 toolbar的设置问题 获取到tStatusBar的高度
</pre>

剩下的明天继续补充。 欢迎留言
下一章 toolbar的颜色 和状态栏的颜色
http://www.jianshu.com/p/3d50b4fad310

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容