很多时候我们会有改变状态栏颜色或者用背景图侵入状态栏的这种需求,所谓侵入式布局实际上就是将状态栏背景色改为透明然后将背景图从状态栏的顶部开始绘制,比如下图
废话不多说,我们从新建Activity开始一步一步来实现
第一步,添加主题,去掉默认的ActionBar
<activity android:name=".views.StatusActivity"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
第二步,添加侵入式布局代码
Lollipop以上的设备
window.apply {
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
statusBarColor = Color.TRANSPARENT
}
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
window到底是什么
当你打开一个StandardApp的时候,从上到下你会依次看到手机状态栏(StatusBar)、导航栏(NavigationBar)、然后是Activity的实际页面。它们每一个组件都有一个不同的Window用于它们自身的绘制。Activity的Window负责显示我们设计的视图,导航栏的Window负责绘制我们的菜单、返回键等等。状态