关于沉浸式状态栏的种种就不多详谈了,稍微Google一下一大片,这里添几句代码实现:
主活动onCreate():
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT)
{
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
在相应的布局xml文件添加
android:fitsSystemWindows="true"
android:clipToPadding="true"
---------------------------------华丽的分割线-----------------------------
上面对于低版本可以一劳永逸,但稍高的版本就不起作用了,下面根据我的项目实际需求写一下(活动onCreate())
1. 主界面
页面需要占用状态栏的空间,状态栏背景设为透明,但是状态栏的文字颜色需要根据页面的背景颜色稍微调整(例如页面背景颜色和状态栏字体颜色都为白色,状态栏文字相当于不可见)
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT)
{
Window window = getWindow();
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP){
//设置状态栏透明
window.setStatusBarColor(Color.TRANSPARENT);
//根据页面背景颜色修改状态栏字体颜色(暗-->白色;亮-->黑色)
View decor = window.getDecorView();
if (true) {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
}
2. 子页面
子页面需要使用标题栏,所以将标题栏的背景颜色和状态栏的背景颜色改成一致即可(有需要可以把页面的背景颜色改成一致或者是渐变的颜色)
Window window = getWindow();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //清除沉浸式状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimary)); //设置状态栏颜色
}
}
在对应Activity的xml布局文件添上:
android:fitsSystemWindows="true"
android:clipToPadding="true"