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" >

这样状态栏的背景就是你的 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);
}
时间: 2024-10-04 21:25:24

Android 4.4 沉浸式透明状态栏与导航栏的相关文章

Android UI体验之全屏沉浸式透明状态栏效果

前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体验.而Android 5.0之后谷歌又提出了 ColorPalette 的概念,让开发者可以自己设定系统区域的颜色,使整个 App 的颜色风格和系统的颜色风格保持统一.今天学习总结一下如何实现Android 4.4以上全屏沉浸式透明状态栏效果.先看下预期效果: 首先现分清楚哪部分是状态栏,哪部分是导

对系统版本为4.4及以上的开启 透明状态栏和导航栏(即沉浸式状态栏)

/*对系统版本为4.4及以上的开启 透明状态栏和导航栏(即沉浸式状态栏)*/ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); // Translucent status bar window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FL

Android一体式(沉浸式)状态栏的实现

注:公司开发任务适配是在4.4版本之上进行,所以此适配仅在4.4之上进行测试. 1.主要使用了第三方的开源项目SystemBarTint,github:https://github.com/jgilfelt/SystemBarTint 2.根据SystemBarTint自带sample进行研究,主要步骤如下: 在Activity中加入如下代码: public class MainActivity extends BaseActivity { @Override public void setCo

Android中的沉浸式状态栏效果

无意间了解到沉浸式状态栏,感觉贼拉的高大上,于是就是试着去了解一下,就有了这篇文章.下面就来了解一下啥叫沉浸式状态栏.传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这一样就在一定程度上牺牲了视觉宽度,界面面积变小.Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.

android 自定义状态栏和导航栏分析与实现

效果 android 4.4之后,系统是支持自定义状态栏和导航栏的,举个最典型的例子就是bilibili客户端了(iOS版本和android版本能用两套完全不一样符合各自系统的设计ui,良心啊-),顶部状态栏为粉色,底部导航栏为半透明色: 接着QQ最新的版本6.2也使用了状态栏透明风格,但是出来的效果在不同版本,不同手机上,显示的效果真是差异很大(4.3版本是无法使用状态栏透明风格的,只是放出来做个对比): ------------------------------------ -------

Android隐藏状态栏、导航栏

Android隐藏状态栏.导航栏 [java] view plain copy private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_INT<16){ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); }else{ int uiFlags = View

iOS 更改状态栏、导航栏颜色的几种方法

ios上状态栏 就是指的最上面的20像素高的部分状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池.时间等部分:背景部分:就是显示黑色或者图片的背景部分: (一)设置statusBar的[前景部分] 简单来说,就是设置显示电池电量.时间.网络部分标示的颜色, 这里只能设置两种颜色: 默认的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent)可以设置的地方有两个:plist设置里面 和 程序代码里初始化设

关于状态栏与导航栏的设置及自定义

关于状态栏和导航栏遇到的设置问题 1:statusBar字体为白色 在plist里面设置View controller-based status bar appearance 为 NO:设置statusBarStyle 为 UIStatusBarStyleLightContent 2:设置statusBar和navigationbar为一体 [nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg_navbar.png"

改变状态栏和导航栏的透明度

如何实现这个半透明效果呢? 步骤一: 为UIImage类添加静态方法: extension UIImage { static func imageWithColor(color: UIColor) -> UIImage { let rect = CGRect(x: 0, y: 0, width: 1, height: 1) UIGraphicsBeginImageContext(rect.size) let context = UIGraphicsGetCurrentContext() CGCo