文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android沉浸式实现兼容的示例分析

2023-05-30 17:15

关注

这篇文章主要介绍Android沉浸式实现兼容的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

先介绍下,什么是沉浸式状态栏?

沉浸式,要求在应用中Android状态栏(StatusBar)与标题栏(ActionBar/Toolbar)要拥有相同的颜色,或者使用同一张图的连续背景。

Android沉浸式实现兼容的示例分析

Android沉浸式实现兼容的示例分析

话不多说,亮剑吧!

具体实现需要针对不同Android版本做处理,还有针对DecorView做处理以及做activity的xml布局文件根布局控件做属性处理。

java代码,设置沉浸式的方法

    protected void setImmersiveStatusBarColor(@ColorRes int colorResId) {    int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {      int statusBarColor = ApkUtil.getColor(this, colorResId); //①      float lightDegress = (Color.red(statusBarColor) + Color.green(statusBarColor) + Color.blue(statusBarColor)) / 3; //作色彩亮度判断,好针对颜色做相应的状态栏的暗色还是亮色。      if ((lightDegress > 200 || lightDegress == 0) && Build.VERSION.SDK_INT > Build.VERSION_CODES.M)        rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);      window.setStatusBarColor(statusBarColor);    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {      window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);      rootView.setSystemUiVisibility(flags | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {      rootView.setSystemUiVisibility(flags);    }    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { //当API小于等于19,此时为了实现沉浸式状态栏,需要添加一个view来做statusbar背景控件      final boolean isHasStatusBarView = rootView.getTag() != null;      View statusbarView = !isHasStatusBarView ? new View(this) : (View)rootView.getTag();      statusbarView.setBackgroundResource(colorResId);      if(!isHasStatusBarView) {        rootView.setTag(statusBarView);        statusbarView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, ViewUtil.getStatusBarHeight(this))); //②        rootView.addView(statusbarView);      }    }  }

注:此处针对rootView(即DecorView)、window的获取不再陈述!

①.ApkUtil.getColor(this, colorResId)

    @SuppressWarnings("deprecation")  public static int getColor(Context context, int colorId) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {      return context.getColor(colorId);    }    return context.getResources().getColor(colorId);  }

②. 获取状态栏高度

    @JvmStatic  @SuppressLint("PrivateApi")  fun getStatusBarHeight(context: Context): Int {    val clazz = Class.forName("com.android.internal.R\$dimen")    val obj = clazz?.newInstance()    val field = clazz.getField("status_bar_height")    field?.let {      field.isAccessible = true      val x = Integer.parseInt(field.get(obj).toString())      return context.resources.getDimensionPixelSize(x)    }    return 75  }

activity布局xml根布局添加以下属性

 android:fitsSystemWindows="true" android:clipToPadding="false"

以上是“Android沉浸式实现兼容的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯