一行代码实现沉浸式状态栏
来源:互联网 发布:淘宝网店代理商 编辑:程序博客网 时间:2024/06/06 08:36
参考了StatusBarUtil这个库,使用里面StatusBarUtil.setColor(Activity activity,int color),发现状态栏颜色改变 但透明度存在一定差异
于是用其StatusBarUtil.setTransparent(Activity activity),状态栏变为透明,但颜色却变为白色,于是看了其源码,整理出一个方法,一行代码实现沉浸式状态栏效果;
效果图:
StatusBarUtil.setColor(this,0xc30d23,0);
import android.app.Activity;import android.content.Context;import android.os.Build;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.LinearLayout;/** * Created by Administrator on 2016/12/26. */public class StatusBarUtil { /** * 设置状态栏颜色 * * @param activity 需要设置的activity * @param color 状态栏颜色值 * @param statusBarAlpha 状态栏透明度 */ public static void setColor(Activity activity, int color, int statusBarAlpha) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha)); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 生成一个状态栏大小的矩形 View statusView = createStatusBarView(activity, color, statusBarAlpha); // 添加 statusView 到布局中 ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); decorView.addView(statusView); setRootView(activity); } } /** * 计算状态栏颜色 * * @param color color值 * @param alpha alpha值 * @return 最终的状态栏颜色 */ private static int calculateStatusColor(int color, int alpha) { float a = 1 - alpha / 255f; int red = color >> 16 & 0xff; int green = color >> 8 & 0xff; int blue = color & 0xff; red = (int) (red * a + 0.5); green = (int) (green * a + 0.5); blue = (int) (blue * a + 0.5); return 0xff << 24 | red << 16 | green << 8 | blue; } /** * 设置根布局参数 */ private static void setRootView(Activity activity) { ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); rootView.setFitsSystemWindows(true); rootView.setClipToPadding(true); } /** * 生成一个和状态栏大小相同的半透明矩形条 * * @param activity 需要设置的activity * @param color 状态栏颜色值 * @param alpha 透明值 * @return 状态栏矩形条 */ private static View createStatusBarView(Activity activity, int color, int alpha) { // 绘制一个和状态栏一样高的矩形 View statusBarView = new View(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)); statusBarView.setLayoutParams(params); statusBarView.setBackgroundColor(calculateStatusColor(color, alpha)); return statusBarView; } /** * 获取状态栏高度 * * @param context context * @return 状态栏高度 */ private static int getStatusBarHeight(Context context) { // 获得状态栏高度 int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); return context.getResources().getDimensionPixelSize(resourceId); }}
0 0
- 一行代码实现沉浸式状态栏
- 一行代码实现沉浸式状态栏
- 沉浸式状态栏一行代码调用
- 一行代码使Android状态栏变沉浸式透明化
- 沉浸式状态栏的实现代码
- 沉浸式状态栏实现
- 沉浸式状态栏实现
- 沉浸式状态栏实现
- 沉浸式状态栏实现
- 实现沉浸式状态栏
- android Titlebar一行代码实现沉浸式效果
- android:一行代码实现沉浸式布局效果
- 一行代码完美实现Android沉浸式效果
- android:一行代码实现沉浸式布局效果
- android一行代码实现沉浸式布局效果
- android实现沉浸式状态栏
- 沉浸式状态栏的实现;
- 沉浸式状态栏的实现
- Dubbo-基础应用
- 阿里飞天云平台架构简介
- 欢迎使用CSDN-markdown编辑器
- [c#] for和foreach
- 将博客搬至CSDN
- 一行代码实现沉浸式状态栏
- Azkaban 2.5.0 搭建和一些小问题
- bzoj 2243: [SDOI2011]染色 (树链剖分+线段树)
- mysql limit查询优化方法(offset偏移量)
- Android 将assets中的单个文件拷贝到sd卡中
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Linux 安装MYSQLdb
- MySQL的sql_mode合理设置
- Android屏幕适配