最近项目要实现沉浸式状态栏,沉浸式状态栏只有4.4以上才能实现。4.4是渐变色 5.x以上是完全透明
4.4的显示效果
5.x以后的显示效果
在程序里面直接写上这一句就OK了,简单方便
首先这个fitview就是title的布局,得保证fitview已经被findViewById.
public static void setTranslucentBar(View view, Activity activity) {
if (!isSdkSupport()) {
return;
}
setTranslucentStatus(activity);
setTranslucentTransparent(activity);
fitStatusBar(view, activity);
}
isSdkSupport()方法是判断Build 版本是否是在19以上
public static boolean isSdkSupport() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return true;
}
return false;
}
setTranslucentStatus(activity) 就是设置沉浸式
@TargetApi(19)
private static void setTranslucentStatus(Activity activity) {
Window window = activity.getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
layoutParams.flags |= bits;
window.setAttributes(layoutParams);
}
到这里,就完成状态栏 但是 在5.x上面可以把状态栏设置成透明,也就是setTranslucentTransparent(activity)方法
private static void setTranslucentTransparent(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
完成到这里的效果
title的布局都显示在状态栏了 这就不好了,那怎么解决这个方法呢?
我们直接给title布局的高度多加一个状态栏的高度不就可以了吗?
这也就是fitStatusBar(fitview,activity)的方法了。
private static void fitStatusBar(View fitView, Activity activity) {
ViewGroup.LayoutParams layoutParams = fitView.getLayoutParams();
int paddingleft=fitView.getPaddingLeft();
int paddingright=fitView.getPaddingRight();
int paddingtop=fitView.getPaddingTop()+DeviceUtil.getStatusBarHeight(activity);
int paddingbuttom=fitView.getPaddingBottom();
layoutParams.height+=DeviceUtil.getStatusBarHeight(activity);
fitView.setPadding(paddingleft, paddingtop, paddingright, paddingbuttom);
}
最后给出DeviceUtil.getStatusBarHeight方法
public static int getStatusBarHeight(Activity mActivity){
int resourceId = mActivity.getResources().getIdentifier("status_bar_height", "dimen", "android");
return mActivity.getResources().getDimensionPixelSize(resourceId);
}
ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT); ViewGroup parentView = (ViewGroup) contentFrameLayout.getChildAt(0); TranslucentBarUtil.setTranslucentBar(parentView.getChildAt(0),this);
Window.ID_ANDROID_CONTENT:The ID that the main layout in the XML layout file should have(XML中显示区域根视图的ID值,该视图由系统自动生成,未在XML中定义)
parentView 就是xml布局的根文件 这个就看自己的跟布局是什么自己对应就行了