沉浸式状态栏

来源:互联网 发布:c 数据结构与算法 编辑:程序博客网 时间:2024/06/06 01:56

最近项目要实现沉浸式状态栏,沉浸式状态栏只有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布局的根文件   这个就看自己的跟布局是什么自己对应就行了 


原创粉丝点击