沉浸式状态栏的实现

原创文章,转载请注明出处 http://blog.csdn.net/liangzp1990520/article/details/78846272


先上风格

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <!-- Api 19 Android 4.4 及以上实现沉浸式状态栏风格 -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- 主题色,自主设定,无关紧要 -->
        <item name="colorAccent">@android:color/holo_orange_dark</item>
        <item name="colorPrimary">@android:color/holo_blue_dark</item>
        <!-- 重点 -->
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:fitsSystemWindows">false</item>
    </style>
</resources>

  android:windowTranslucentStatus透明的状态栏,android:fitsSystemWindows适配系统窗口,我这里等于假,让其扩充到状态栏


再看布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:background="@drawable/header_back">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"
            app:layout_scrollInterpolator="@android:anim/decelerate_interpolator"
            app:titleEnabled="false"
            app:toolbarId="@+id/toolBar">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_collapseMode="pin"
                app:navigationIcon="@drawable/ic_tool_return"
                app:title="@string/app_name" />

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

            <android.support.v4.view.ViewPager
                android:id="@+id/vPager"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

上图看看
这里写图片描述


  我这把Toolbar进行了着色,看到没有,工具栏扩充到状态栏了,正常情况下,Toolbar是透明的,也就能与背景相容了,但是问题来了,这样一来Toolbar的图标或子控件与状态栏重叠了,事实上是状态栏覆盖了工具栏,毕竟不友好,再改!

<android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:fitsSystemWindows="true"
        android:background="@drawable/header_back">

  让AppBarLayout布局适配窗口
这里写图片描述
  fitsSystemWindows使AppBarLayout进行了偏移,适配了系统默认的布局,实际上只是对其内容进行了偏移,背景却没有,我不知道是不是BUG,为什么这么说,因为我又发现了另一个问题!


这里写图片描述这里写图片描述
  这个例子是做折叠工具栏的,在工具栏折叠恢复后,显然没有恢复到原来的位置,好吧,我错了,它是恢复到原来的位置了,不过不是适配后的位置,如果你往下拉还能拉一截,这明显的非常不友好,再改!可是怎么改,缩展行为BehaviorAppBarLayout内定义的,要改就改它,可是工作量就大了,要知道做开发效率也是很重要的,完成了手头的工作,那就有一把的时间打游戏了哈。
  还有一个办法,调整Toolbar外边距,删掉AppBarLayoutfitsSystemWindows,把android:layout_marginTop="24dp"加到Toolbar,成了,但是有一个问题,不同的设备状态栏的高度也是不一样的,问题不大,实际开发当中,Toolbar是透明的,与背景融合,而Toolbar也有默认的内边距,一般状态栏高度为24-25dp这样,一点点差距不会影响外观,或者你有更好的解决办法还请不吝赐教,最后上完成图:

这里写图片描述这里写图片描述这里写图片描述


PS:第一次写博客,不到之处好请包含
IDE:Android Studio 3.0.1
模拟器:某神模拟器,Android 4.4.4

例子由官方模板修改而来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值