原创文章,转载请注明出处 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,为什么这么说,因为我又发现了另一个问题!
这个例子是做折叠工具栏的,在工具栏折叠恢复后,显然没有恢复到原来的位置,好吧,我错了,它是恢复到原来的位置了,不过不是适配后的位置,如果你往下拉还能拉一截,这明显的非常不友好,再改!可是怎么改,缩展行为Behavior
是AppBarLayout
内定义的,要改就改它,可是工作量就大了,要知道做开发效率也是很重要的,完成了手头的工作,那就有一把的时间打游戏了哈。
还有一个办法,调整Toolbar
外边距,删掉AppBarLayout
的fitsSystemWindows
,把android:layout_marginTop="24dp"
加到Toolbar
,成了,但是有一个问题,不同的设备状态栏的高度也是不一样的,问题不大,实际开发当中,Toolbar
是透明的,与背景融合,而Toolbar
也有默认的内边距,一般状态栏高度为24-25dp这样,一点点差距不会影响外观,或者你有更好的解决办法还请不吝赐教,最后上完成图:
PS:第一次写博客,不到之处好请包含
IDE:Android Studio 3.0.1
模拟器:某神模拟器,Android 4.4.4
例子由官方模板修改而来