0.概述
在Android L 中最常使用的页面布局DrawerLayout. 官方App显示的效果是这样的:
但是简单使用DrawerLayout是没有这个效果的。下面就来逐步实现这个全屏效果。
1.思路
使用ToolBar代替ActionBar,从而让View的绘制范围包含ActionBar那块区域。
让DrawerLayout去设置statusbar的颜色。
2.过程
1.设置theme:
<style name="AppTheme.Main" parent="AppTheme">
<!-- 默认的statusBar color -->
<item name="android:statusBarColor">@color/dialog_bg_light</item>
<!-- 弃用系统ActionBar -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!-- 如果希望通过DrawerLayout设置statusbarColor,则可以使window 管理 status bar color -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
2.在布局中加入 Toolbar
注意设置android:fitsSystemWindows="true"
,不然DrawerLayout无法穿透statusBar
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/dialog_bg"
android:minHeight="?attr/actionBarSize" />
</FrameLayout>
<!-- The navigation drawer -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#1B5E20"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:fitsSystemWindows="true" />
</android.support.v4.widget.DrawerLayout>
3.Activity中使用布局中的ToolBar
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
// 注意setStatusBarBackgroundColor方法需要你将fitsSystemWindows设置为true才会生效
// DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// drawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.dialog_bg));
}