两个方法搞定透明状态栏

简介: 两个方法搞定透明状态栏

只调用两个方法即可搞定透明状态栏
说明:

  1. 以下三个方法都是静态方法, 放到你项目的工具类中调用即可;
/**
 * 透明状态栏(界面会展示在状态栏下面, 此时状态栏挡住了我们的界面上的一些东西, 需要处理)
 * 需要在 setContentView()方法之前调用, 否则程序会崩溃

 */
public static void alphaTask(Activity context) {
    context.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = context.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_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.TRANSPARENT);
        window.setNavigationBarColor(Color.TRANSPARENT);
    }
}

/**
 * 获取系统状态栏的高度(目的是让被系统状态栏挡住的内容移动到状态栏下面)
 */
public static int getStatusBarHight(Context context) {
    int statusBarHeight = -1;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
    }
    return statusBarHeight;
}

/**
 * 设置ActionBar距离顶部的距离为系统状态栏的高度距离(此时, 状态栏已经不会挡住我们的界面了)
 */
public static void initActionBar(Context context, View actionBar) {
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) actionBar.getLayoutParams();
    params.setMargins(0, getStatusBarHight(context), 0, 0);
}

单个activity调用即可, 如果要在BaseActivity中封装该功能, 在BaseActivity的onCreate方法中的setContentView方法之前调用alphaTask方法, 然后在BaseActivity中封装抽象方法, 将actionBar的view对象传入, 强制子类实现, 即可;

目录
相关文章
|
6月前
|
自然语言处理 算法 数据挖掘
长绳方法
进一步提高语言模型(LLM)的性能,通过扩展其上下文窗口至超过200万个标记,从而实现更深入的语境理解。本文将对这一成果进行深入解读,探讨其意义和潜在应用。
52 2
|
14天前
|
敏捷开发 安全 Java
论软件维护方法及其应用
【11月更文挑战第16天】在软件开发的整个生命周期中,软件维护阶段占据了超过60%的时间。本文旨在深入探讨软件维护方法及其应用,通过笔者参与的一个实际Java项目为例,详细阐述软件维护的重要性、影响因素以及具体实践。
26 1
|
5月前
|
存储 缓存 Java
createTempFile方法详解
createTempFile方法详解
|
6月前
|
算法 数据安全/隐私保护
常用的有限元网格生成方法
本文介绍了三种常见的有限元网格生成方法:映射法、四(八)叉树法和Delaunay三角化法。映射法通过坐标变换将物理域映射到规则参数域,适合生成结构化和非结构化网格,但处理复杂区域时较困难。四(八)叉树法基于栅格,通过递归细分逼近边界,适用于非结构化网格,但内部和边界网格的相容剖分较复杂。Delaunay三角化法通过保证外接圆特性生成高质量网格,适用于凸区域,但在凹区域需进行边界恢复。前沿推进法则从边界开始逐步向内生成网格,边界质量好,但数据结构设计和推进规则制定有一定挑战。这些方法各有优缺点,常结合使用以优化网格剖分。
673 1
|
安全 Java
浅析ThreadList的runcheckpoint方法
浅析ThreadList的runcheckpoint方法
122 0
|
Python 容器
强大的 accessor 方法
强大的 accessor 方法
|
移动开发 JavaScript 前端开发
Egiht(八种方法)
Problem Description The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it.
1332 0
|
C# 编译器 索引