透明状态栏 网上都叫沉浸式状态栏,说到底就是为了应用主题统一,美观。
Android4.4和5.0以上实现有些区别,4.4以下不支持
4.4有两种实现方式
1. 状态栏透明 且覆盖根布局 效果如下
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
默认情况是这样的
可以看到整个布局穿过了状态栏,显然这不是我们想要的样子,解决这个问题也不难 设置一个paddingTop ,大小和状态栏一样高就可以了
效果如下
2. 状态栏透明 且不覆盖根布局 效果如下
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
然后在根布局里添加
android:fitsSystemWindows="true"
如果根布局没有设置背景颜色就会变成这样子
设置了背景颜色后就跟背景颜色一样了
这是我目前所知道的关于4.4设置状态栏透明的和为状态着色的方法
5.0以上 当然5.0以上也能有4.4的方法实现
但是效果有点差别 不是全透明的
可以用另一种方式实现全透明
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
5.0以上可以设置状态栏颜色 而不用跟着根布局背景色
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
window.setStatusBarColor(Color.YELLOW);
}
}
以上就是我所知道关于设置状态栏主题的方法,有什么不对的欢迎指出