以前在大号写过一篇同名文章 ,有一天登陆CSDN,网站居然要绑定手机号,于是尝试绑定手机号时发现手机号已被另一个ID绑定,没法解锁。看了下文章有很多地方需要修改,不得不另立新号重写文章。
引用:
[奇技淫巧] Android 4.4 5.0 6.0 另一种思路的沉浸式状态栏
自己的文章,可惜要绑定手机,基本是告别这个ID了
http://blog.csdn.net/HQS515/article/details/73608633
思路:网上大多数教程讲怎么样设置状态栏背景颜色,各版本适配下来比较繁琐。仔细一想自定义标题栏的做法,为啥不直接去掉状态栏,然后自己写一个状态栏上去呢,颜色就变得可控?
写一个枚举判断版本
private enum SystemOS {
API00("Android 1.1以上"),
API19("Android 4.4以上"),
API21("Android 5.0以上"),
API23("Android 6.0以上");
String desc;
SystemOS(String desc) {
this.desc = desc;
}
}
对应判断版本的方法
static {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { //0.0 <= system < 4.4
systemOS = SystemOS.API00;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //4.4 <= system < 5.0
systemOS = SystemOS.API19;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { //5.0 <= system < 6.0
systemOS = SystemOS.API21;
} else { //6.0 <= system
systemOS = SystemOS.API23;
}
}
关键点:
去除顶部状态栏
Window window = activity.getWindow();
window.setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
view.setSystemUiVisibility(View.INVISIBLE //隐藏状态栏半透明背景,同时Activity会伸展全屏显示
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR // 设置状态栏文字为暗色 6.0以上
View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 设置状态栏文字为浅色
计算statusBar的方法:
private 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;
}
完整的方法:
public class StatusBarUtil {
private boolean isTransparent;
private View view = null;
private static SystemOS systemOS = SystemOS.API00;
private Activity activity;
static {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { //0.0 <= system < 4.4
systemOS = SystemOS.API00;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //4.4 <= system < 5.0
systemOS = SystemOS.API19;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { //5.0 <= system < 6.0
systemOS = SystemOS.API21;
} else { //6.0 <= system
systemOS = SystemOS.API23;
}
}
public StatusBarUtil getImageLayout(Activity activity, int resId) {
return getNewLayout(activity, resId, 0, true);
}
public StatusBarUtil getBaseLayout(Activity activity, int resId, int statusBarColor) {
return getNewLayout(activity, resId, statusBarColor, false);
}
/**
* 生成新界面
*
* @param resId activity资源布局
* @param statusBarColor 颜色
* @param isTransparent 设置顶部是否为透明
* @return
*/
private StatusBarUtil getNewLayout(Activity activity, int resId, int statusBarColor, boolean isTransparent) {
this.isTransparent = isTransparent;
this.activity = activity;
LogUtils.d("Current System version:", Build.VERSION.SDK_INT);
if (systemOS == SystemOS.API00) { //Api18以下 Android 4.3及其以下
view = LayoutInflater.from(activity).inflate(resId, null);
this.isTransparent = true;
return this;
}
Window window = activity.getWindow();
window.setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (isTransparent) {
view = LayoutInflater.from(activity).inflate(resId, null);
} else {
FrameLayout.LayoutParams baseParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
LinearLayout linearLayout = new LinearLayout(activity);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setLayoutParams(baseParams);
View statusView = new View(activity);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.height = getStatusBarHeight(activity);
statusView.setLayoutParams(layoutParams);
LogUtils.d("Color:", statusBarColor);
try {
statusView.setBackgroundColor(statusBarColor);
} catch (Exception e) {
int defaultColor = Color.RED;
statusView.setBackgroundColor(defaultColor);
}
linearLayout.addView(statusView);
LayoutInflater.from(activity).inflate(resId, linearLayout, true);
// linearLayout.addView(layout);
view = linearLayout;
}
return this;
}
public View buildLayout() {
return buildLayout(true);
}
/**
* 创建layoutView
*
* @param isShowBarBackColor 清除statusBar背景色,设置是否显示半透明背景颜色
*/
public View buildLayout(boolean isShowBarBackColor) {
if (systemOS == SystemOS.API00 || systemOS == SystemOS.API19) {
} else if (systemOS == SystemOS.API21 || systemOS == SystemOS.API23) { //5.0 6.0
if (isShowBarBackColor) {
if (systemOS == SystemOS.API23) {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
} else {
if (systemOS == SystemOS.API23) {
view.setSystemUiVisibility(View.INVISIBLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
view.setSystemUiVisibility(View.INVISIBLE);
}
}
}
return view;
}
private 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;
}
private enum SystemOS {
API00("Android 1.1以上"),
API19("Android 4.4以上"),
API21("Android 5.0以上"),
API23("Android 6.0以上");
String desc;
SystemOS(String desc) {
this.desc = desc;
}
}
}
使用方式: 在Activity的onCreate()中使用本段代码就行:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isTransparentStatusBar()) {
view = new StatusBarUtil().getImageLayout(mActivity, resId).buildLayout(false);
} else {
int color = ActivityCompat.getColor(mContext, R.color.activity_background_normal);
view = new StatusBarUtil().getBaseLayout(mActivity, resId, color).buildLayout(false);
}
setContentView(view);
}
-over-
有什么疑问可以留言
如果感觉帮到了你 提升了效率 也可以打赏一下小弟
支付宝
微信