第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 沉浸式状态栏实现 完美适配Android刘海屏 终极兼容

沉浸式状态栏实现 完美适配Android刘海屏 终极兼容

时间:2020-11-19 08:24:56

相关推荐

沉浸式状态栏实现 完美适配Android刘海屏 终极兼容

第一篇博客献给曾经帮助我N次的CSDN,在此感谢那些帮助我头发越来越少的***。

刘海屏出来有一段时间了,为了适配刘海屏找了不少方案,感觉都比较费劲。

因为我们项目需求,状态栏是渐变色,所以我采用了全面屏的模式来对标题栏状态栏进行开发;

总体思路:刘海屏状态栏的高度其实和普通的都是一样,所以只要给全面屏的页面设置一个paddingtop就可以实现,我是写一个公共的头部布局在基类里用,给头布局设置一个paddingtop,paddingtop的值就是状态栏的高度。具体代码如下:

第一步:设置全屏,设置状态栏透明

/** @param activity*/public static void fullScreen(Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色Window window = activity.getWindow();View decorView = window.getDecorView();//两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;decorView.setSystemUiVisibility(option);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT));} else {Window window = activity.getWindow();WindowManager.LayoutParams attributes = window.getAttributes();int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;int flagTranslucentNavigation = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;attributes.flags |= flagTranslucentStatus;window.setAttributes(attributes);}}}

第二步:添加头布局

也可以使用跟布局,具体情况看自己的项目

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".base.MVPBaseActivity"><!-- 顶部导航 --><include android:id="@+id/includ_title"layout="@layout/header_title_layout" /><!-- 中间填充部分 --><FrameLayout android:id="@+id/fl_body"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_below="@+id/includ_title"android:orientation="vertical" /></RelativeLayout>

第三步:给头布局设置布局的paddingtop

根据SDK号去判断是否设置paddingtop,不支持沉浸式状态栏的机型,直接不进行设置即可。这样既实现了沉浸式状态栏,同时又适配了刘海屏,不需要考虑手机品牌等问题。

/** @param view 需要设置的view,我这里用到的是布局文件中的include_title*/public void setBarPadding(View view) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {view.setPadding(view.getPaddingLeft(),UIUtils.dip2px(8),view.getPaddingRight(), view.getPaddingBottom());} else {view.setPadding(view.getPaddingLeft(), getStatuBarHeight(), view.getPaddingRight(), view.getPaddingBottom());}}

有什么问题,欢迎大家指教。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。