自学内容网 自学内容网

Android 设置特定Activity内容顶部显示在状态栏底部,也就是状态栏的下层 以及封装一个方法修改状态栏颜色

推荐:https://github.com/gyf-dev/ImmersionBar

在 Android 中要实现特定 Activity 内容顶部显示在状态栏底部以及封装方法修改状态栏颜色,可以通过以下步骤来完成:

一、让 Activity 内容显示在状态栏底部

  1. 在 AndroidManifest.xml 文件中,为特定的 Activity 设置主题,主题中可以设置窗口属性,使得状态栏透明: 
<activity android:name=".YourActivity"
          android:theme="@style/TransparentStatusBarTheme">
</activity>

创建一个主题样式文件 styles.xml(如果已有则在其中添加):
 

<style name="TransparentStatusBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
</style>

 Activity 的布局文件根布局中设置 fitsSystemWindows 属性为 true,这样可以让布局适应系统窗口,包括状态栏: 
 

  1. 在 Activity 的 onCreate 方法中,通过代码设置状态栏透明:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.TRANSPARENT);
}

二、封装修改状态栏颜色的方法

  1. 创建一个工具类 StatusBarUtils: 

public class StatusBarUtils {
    public static void setStatusBarColor(Activity activity, int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = activity.getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(color);
        }
    }
}

  1. 在需要修改状态栏颜色的地方调用这个方法:

StatusBarUtils.setStatusBarColor(this, Color.RED); // 将状态栏颜色设置为红色

通过以上步骤,就可以实现特定 Activity 内容顶部显示在状态栏底部,并可以方便地通过封装的方法修改状态栏颜色。


import android.app.Activity;
import android.os.Build;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class StatusBarUtils {

    /**
     * StatusBarUtils.setStatusBarColor(this, Color.RED); // 将状态栏颜色设置为红色
     */
    public static void setStatusBarColor(Activity activity, int statusBarBgcolor, boolean isLightStatus) {
        Window window = activity.getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(statusBarBgcolor);
        View decorView = window.getDecorView();
        int flags = decorView.getSystemUiVisibility();
        if (isLightStatus) {
            // 设置为浅色模式(黑色文字)
            flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
        } else {
            // 设置为深色模式(白色文字)
            flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
        }
        decorView.setSystemUiVisibility(flags);
    }

    /**
     * 判断当前活动的状态栏是否为浅色。
     *
     * @param activity 活动实例
     * @return 如果状态栏为浅色,返回 true;否则返回 false。
     */
    private static boolean isLightStatusBar(Activity activity) {
        try {
            View decorView = activity.getWindow().getDecorView();
            int flags = decorView.getSystemUiVisibility();
            return (flags & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) != 0;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    private static void setLightStatusBar(Activity activity, boolean isLightStatus) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isLightStatus != isLightStatusBar(activity)) {
            View decorView = activity.getWindow().getDecorView();
            int flags = decorView.getSystemUiVisibility();
            if (isLightStatus) {
                flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            } else {
                flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            }
            decorView.setSystemUiVisibility(flags);
        }
    }


}


原文地址:https://blog.csdn.net/xiaoerbuyu1233/article/details/142974672

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!