android开发沉浸式标题栏_Android应用开发Android 沉浸式状态栏

本文将带你了解Android应用开发Android 沉浸式状态栏,希望本文对大家学Android有所帮助。

Android 沉浸式状态栏的苦逼之旅,先说一下基本设定

1、values-v21

2、values-v19

状况一

开发完程序用同事的小米手机测试(⊙o⊙),突然发现白色状态栏,白色字体(⊙﹏⊙)b,这TM的能看吗,于是就有了下面的代码

//处理状态栏,小米

public static void setStatusBarDarkMode(boolean darkmode, Activity   activity) {

Class

clazz = activity.getWindow().getClass();

try {

int darkModeFlag = 0;

Class

layoutParams =   Class.forName(android.view.MiuiWindowManager$LayoutParams);

Field field = layoutParams.getField(EXTRA_FLAG_STATUS_BAR_DARK_MODE);

darkModeFlag =   field.getInt(layoutParams);

Method extraFlagField =   clazz.getMethod(setExtraFlags, int.class, int.class);

extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag :   0, darkModeFlag);

} catch (Exception e) {

e.printStackTrace();

}

}

然后BaseActivity中的onCreate中setStatusBarDarkMode(true,   this);一下,好了字体变黑了,既然字体可变了,那么就该改状态栏,先上一张图

这是Android5.0的效果图,所以我们经常看到刚创建的工程里面有这样的代码

恩,我们要修改statusBarColor,然而4.4-5.0没法直接改状态栏颜色,折中办法

1、状态栏变半透明,没错就是上面values-v19的设置

2、在状态栏上加一个布局

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT &&   Build.VERSION.SDK_INT

{

int color = COLOR_DEFAULT;

ViewGroup contentView =   (ViewGroup) activity.findViewById(android.R.id.content);

if (statusColor !=   INVALID_VAL)

{

color = statusColor;

}

View statusBarView = new   View(activity);

ViewGroup.LayoutParams lp = new   ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));

//可以是资源,我这是渐变的,像QQ一样

statusBarView.setBackgroundResource(R.drawable.bg_title_gradient);

//可以是具体的颜色,反正View能设置的都想

//statusBarView.setBackgroundColor(color);

contentView.addView(statusBarView, lp);

}

获取状态栏的高度

public static int getStatusBarHeight(Context context)

{

int result = 0;

int resourceId =   context.getResources().getIdentifier(status_bar_height, dimen,   android);

if (resourceId > 0)

{

result =   context.getResources().getDimensionPixelSize(resourceId);

}

return result;

}

以上就是4.4-5.0状态栏的设置方法

5.0以后的

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)

{

if (statusColor !=   INVALID_VAL)

{

//透明状态栏,也就是不能要values-v19中主题的方法

activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

//需要设置这个 flag 才能调用   setStatusBarColor 来设置状态栏颜

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

activity.getWindow().setStatusBarColor(statusColor);

}

}

好了,在BaseActivity里面onCreate使用,比如StatusBarCompat.compat(this,   R.color.blue);

状况二

打开我自己的红米手机,状态栏没变色,然后看一下系统版本5.0的,没问题啊,然后我将百度翻烂了没找到原因,而在另一台华为4.4上都是可以的。最后还是在写布局的时候忘加入android:fitsSystemWindows=”true”发现状态栏根本不是透明的,就是白的…

状况三

我不想用自己的手机测试了,就创建了个模拟器(Android7.0),什么,状态栏又没变色%>_

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

public static void compat(Activity activity, int statusColor)

{

if (Build.VERSION.SDK_INT >=   Build.VERSION_CODES.LOLLIPOP)

{

if (statusColor !=   INVALID_VAL)

{

int color =   COLOR_DEFAULT;

ViewGroup contentView =   (ViewGroup) activity.findViewById(android.R.id.content);

if (statusColor !=   INVALID_VAL)

{

color =   statusColor;

}

View statusBarView = new   View(activity);

ViewGroup.LayoutParams lp   = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,   getStatusBarHeight(activity));

statusBarView.setBackgroundResource(R.drawable.bg_title_gradient);

contentView.addView(statusBarView, lp);

}

}

if (Build.VERSION.SDK_INT >=   Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT <   Build.VERSION_CODES.LOLLIPOP)

{

int color = COLOR_DEFAULT;

ViewGroup contentView =   (ViewGroup) activity.findViewById(android.R.id.content);

if (statusColor !=   INVALID_VAL)

{

color =   statusColor;

}

View statusBarView = new   View(activity);

ViewGroup.LayoutParams lp =   new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,   getStatusBarHeight(activity));

statusBarView.setBackgroundResource(R.drawable.bg_title_gradient);

contentView.addView(statusBarView, lp);

}

}

以上方法应该可以应对4.4以上所有方法

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值