zoukankan      html  css  js  c++  java
  • Android 4.4 沉浸式透明状态栏与导航栏

    Android 系统自4.2 開始 UI 上就没多大改变,4.4 也仅仅是添加了透明状态栏与导航栏的功能,如图




    那么如今我就来给大家解说下怎样使用这个新特性,让你的 app 尾随潮流,当然假设你不在乎外观就算了,
    使用这个特性能开发出非常美丽的UI,尤其对于 google 原生系统,屏幕下方的导航栏白白占领一块屏幕空间,看起来非常不爽



    OK废话不多讲,開始讲技术吧,第一种方法,在代码设置:

    1. if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
    2.                                 //透明状态栏
    3.                                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    4.                                 //透明导航栏
    5.                                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    6.                         }
    直接调用上面2行代码能够透明,可是你会发现你的 view 跑到 actionbar 上面去了,非常明显 google 的意图是使你的 view 能够占领整个屏幕,然后 状态栏和导航栏 透明覆盖在上面非常明显这样不可行。
    那有没有办法使你的 view 保持原来大小呢?
    有,你须要在这个 activity 的 layout xml 文件加入两个属性
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2.     android:layout_width="fill_parent"
    3.     android:layout_height="fill_parent"
    4.     android:gravity="center_horizontal"
    5.     
    6.     android:fitsSystemWindows="true"
    7.     android:clipToPadding="true"
    8.     
    9.     android:orientation="vertical" >
    这样状态栏的背景就是你的 activity 的主背景,倘若actionbar 在,将会非常难看,如图:

    事实证明,google 并没有提供一个比較好的解决方式,他的 透明状态栏与导航栏的应用局限于,全屏阅读文字或玩游戏那种情景,


    另外一种方式,是是设置 theme 属性

    1. android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor"
    2.             android:theme="@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor"
    3.             android:theme="@android:style/Theme.Holo.NoActionBar.TranslucentDecor"
    复制代码
    假设你使用自定主题,仅仅需在在 values-19 文件加入下面属性:
    1. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">

    2.         <!-- API 19 theme customizations can go here. -->
    3.         <item name="android:windowTranslucentStatus">true</item>
    4.         <item name="android:windowTranslucentNavigation">true</item>
    5.     </style>
    复制代码

    刚刚说了这个使用有局限性,只是好在有一个开源的东西
    https://github.com/jgilfelt/SystemBarTint


    使用这个开源库,必须开启透明标题栏

    使用这个主题

    1. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">

    2.         <!-- API 19 theme customizations can go here. -->
    3.         <item name="android:windowTranslucentStatus">true</item>
    4.         <item name="android:windowTranslucentNavigation">true</item>
    5.     </style>

    或者在setContentView之前调用这个代码


    1. if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
    2.                                 //透明状态栏
    3.                                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    4.                                 //透明导航栏
    5.                                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    6.                         }




  • 相关阅读:
    Go 语言简介(下)— 特性
    Array.length vs Array.prototype.length
    【转】javascript Object使用Array的方法
    【转】大话程序猿眼里的高并发架构
    【转】The magic behind array length property
    【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript
    【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
    【转】大话程序猿眼里的高并发
    php通过token验证表单重复提交
    windows 杀进程软件
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4282008.html
Copyright © 2011-2022 走看看