Android Translucent System Bar使用小结

之前我们公司在每周技术分享中,描述了一些关于系统APP中状态栏颜色的使用,这里我准备回顾一下相关的知识。(我在这里只考虑Android5.0以上的兼容,我们系统ROM是5.1的,所以我就不考虑5.1以前的版本了)


一些会用到的知识点:

符号的意义
<resources>  
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#F00</item>
    </style>
</resources>

android:background="?attr/colorPrimary"
android:background="@drawable/meizi"
  • 当你使用@符号的时候,它代表引用一个实际的值color, string, dimension。这个资源必须有具体的值,引用的值是多少,实际显示就是多少。(使用@符号的时候,与activity是什么主题无关)
  • 当你使用?符号的时候,那就说明我们正在使用一个style attribute,那么这个时候的值取决于当前使用的主题。在对应的主题中,我们不需要改变XML的布局,只要使用好恰当的主题就可以了。
android:fitsSystemWindows
  • 在布局中设置这个属性就是来告诉View,为系统UI提供空间,不让系统的UI覆盖到我们布局上。前提是将statusbar设置成透明,或者界面全屏的时候,这个属性才会起作用。
  • 如果某个View属性设置了android:fitsSystemWindows=”true” 那就说明该View的padding属性将由系统设置,用户在布局文件中设置的padding会被忽略。系统会自动为该View设置一个paddingTop,值为statusbar的高度。
android:clipToPadding

-android:clipToPadding=”true”指的是如果你设置了padding,那么绘制的范围也会往里面缩。如果设置了false,那么就是说可以绘制在padding区域中。(默认属性是true)
- ViewPager在一屏显示三个item,就用到了这个属性。

android:clipChildren
  • android:clipChildren=”true”指的是子控件能否超过父控件给定的区域,true是不能。如果设置了false的话,那么就能超过父控件的区域了,而不会被压缩。(默认属性是true)
  • 底部导航栏有的突出来一块,可以使用这个属性来做。注意:这个属性值要写在根布局。

好了现在可以切入正题了,再不去做适配4.4及以后的版本上,透明的状态栏等效果还是很好实现的。要在Acitivity中实现Translucent System Bar 的特性,那么需要到AndroidManifest中为指定的Activity设置Theme。如果要兼容低版本,那么就在这个三个文件夹values、values-v19、values-v21里面的style.xml去写Theme.(注意style name名字要一样,不然系统找不到)

全屏沉浸式:values-v21/style.xml
<style name="translucentStatusBar" parent="AppTheme.NoActionBar">
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

属性都很简单,就不介绍了。然后把这个主题应用在Activity上,根布局设置一张图片,看效果:
这里写图片描述

如果Activity使用了DrawerLayout,那么滑动的时候想让窗口延伸至状态栏,那么也需要给statusBar设置透明色。

这里写图片描述

状态栏着色模式:values-v21/style.xml
    <style name="StatusThemeColor" parent="AppTheme.NoActionBar">
    <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@color/color_status_bar</item>
    </style>

这个时候不要忘了,也把Toolbar的背景色换成与状态栏一样的颜色的。看效果:

这里写图片描述


最近在狂解系统应用中的bug,感觉和上高中一样,无止境~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值