胸怀万里世界, 放眼无限未来。这篇文章主要讲述Android 4.4 沉浸式透明状态栏与导航栏相关的知识,希望能为你提供帮助。
安卓4.4才有的沉浸式状态栏
在代码设置:
if(VERSION.SDK_INT > = VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
直接调用上面2行代码可以透明,但是你会发现你的 view 跑到 actionbar 上面去了,很明显
google 的意图是使你的 view 可以占据整个屏幕,然后 状态栏和导航栏 透明覆盖在上面很明显这样不可行。
那有没有办法使你的 view 保持原来大小呢?
有,你需要在这个 activity 的 layout xml 文件添加两个属性:
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal"android:fitsSystemWindows="true" android:clipToPadding="true"android:orientation="vertical" >
【Android 4.4 沉浸式透明状态栏与导航栏】这样状态栏的背景就是你的 activity 的主背景,倘若actionbar 在,将会很难看,如图:
文章图片
第二种方式,是是设置 theme 属性
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" android:theme="@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor" android:theme="@android:style/Theme.Holo.NoActionBar.TranslucentDecor"
复制代码 如果你使用自定主题,只需在在 values-19 文件添加以下属性:
< style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> < !-- API 19 theme customizations can go here. --> < item name="android:windowTranslucentStatus"> true< /item> < item name="android:windowTranslucentNavigation"> true< /item> < /style>
复制代码
刚刚说了这个使用有局限性,不过好在有一个开源的东西
https://github.com/jgilfelt/SystemBarTint
使用这个开源库,必须开启透明标题栏
< style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> < !-- API 19 theme customizations can go here. --> < item name="android:windowTranslucentStatus"> true< /item> < item name="android:windowTranslucentNavigation"> true< /item> < /style>
使用这个主题或者在setContentView之前调用这个代码
if(VERSION.SDK_INT > = VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
推荐阅读
- Android仿QQ界面
- 谈谈我对Android View事件分发的理解
- Android Camera详解
- Gradle with Android
- Android 如何判断指定服务是否在运行中 “Service”
- 如何在Android中的Activity启动第三方应用程序()
- Android系统定制——Download Android System 及加载system镜像文件
- Android 屏幕适配问题分析
- Android应用程序结构