android经常需要修改状态栏的颜色,或者在启动页面或者登录页面将状态栏设置为透明背景(当然如果你设置为全屏的也可以)。
android 4.4修改状态栏颜色
//大于4.4 设置状态栏颜色
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void setStatusBar(int color){
Window window = getWindow();
//设置为透明的状态栏 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ViewGroup decorViewGroup = (ViewGroup) window.getDecorView();
View statusBarView = new View(window.getContext());
int statusBarHeight = getStateBarHeight();
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, statusBarHeight);
params.gravity = Gravity.TOP;
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(color);
decorViewGroup.addView(statusBarView);
//设置View 根据系统窗口调整自己的布局 主要是避免造成状态栏覆盖在app的界面上。也可以通过在布局文件的根目录中设置 android:fitsSystemWindows="true"
ViewGroup mContentView = (ViewGroup) window.findViewById(Window.ID_ANDROID_CONTENT);
View mChildView = mContentView.getChildAt(0);
if (mChildView != null) {
//注意不是设置 ContentView 的 FitsSystemWindows, 而是设置 ContentView 的第一个子 View . 预留出系统 View 的空间.
mChildView.setFitsSystemWindows(true); //适应系统窗口
}
}
获取状态栏高度 获取状态栏的高度三种方式
private int getStateBarHeight(){
int result = 0;
int resourceId = this.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = this.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
android 5.0以上修改状态栏颜色
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void setStatusBarColor(int statusColor) {
Window window = getWindow();
//取消状态栏透明
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//添加Flag把状态栏设为可绘制模式
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(statusColor);
//设置系统状态栏处于可见状态
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
//让view不根据系统窗口来调整自己的布局
ViewGroup mContentView = (ViewGroup) window.findViewById(Window.ID_ANDROID_CONTENT);
View mChildView = mContentView.getChildAt(0);
if (mChildView != null) {
ViewCompat.setFitsSystemWindows(mChildView, false);
ViewCompat.requestApplyInsets(mChildView);
}
}
祝你愉快!