diff --git a/app/src/main/java/me/bakumon/ugank/module/bigimg/BigimgActivity.java b/app/src/main/java/me/bakumon/ugank/module/bigimg/BigimgActivity.java
index 39d8b28..eada329 100644
--- a/app/src/main/java/me/bakumon/ugank/module/bigimg/BigimgActivity.java
+++ b/app/src/main/java/me/bakumon/ugank/module/bigimg/BigimgActivity.java
@@ -16,6 +16,7 @@
import me.bakumon.ugank.R;
import me.bakumon.ugank.base.SwipeBackBaseActivity;
import me.bakumon.ugank.utills.DisplayUtils;
+import me.bakumon.ugank.utills.StatusBarUtil;
import me.bakumon.ugank.widget.PinchImageView;
import me.bakumon.ugank.widget.SquareLoading;
@@ -43,13 +44,8 @@ protected void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_bigimg);
ButterKnife.bind(this);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- appbarBigImg.setPadding(
- appbarBigImg.getPaddingLeft(),
- appbarBigImg.getPaddingTop() + DisplayUtils.getStatusBarHeight(this),
- appbarBigImg.getPaddingRight(),
- appbarBigImg.getPaddingBottom());
- }
+ StatusBarUtil.immersive(this);
+ StatusBarUtil.setPaddingSmart(this, toolbarBigImg);
setSupportActionBar(toolbarBigImg);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
diff --git a/app/src/main/java/me/bakumon/ugank/module/favorite/FavoriteActivity.java b/app/src/main/java/me/bakumon/ugank/module/favorite/FavoriteActivity.java
index de34ada..055c906 100644
--- a/app/src/main/java/me/bakumon/ugank/module/favorite/FavoriteActivity.java
+++ b/app/src/main/java/me/bakumon/ugank/module/favorite/FavoriteActivity.java
@@ -19,6 +19,7 @@
import me.bakumon.ugank.base.SwipeBackBaseActivity;
import me.bakumon.ugank.entity.Favorite;
import me.bakumon.ugank.utills.DisplayUtils;
+import me.bakumon.ugank.utills.StatusBarUtil;
import me.bakumon.ugank.widget.RecycleViewDivider;
import me.bakumon.ugank.widget.recyclerviewwithfooter.OnLoadMoreListener;
import me.bakumon.ugank.widget.recyclerviewwithfooter.RecyclerViewWithFooter;
@@ -44,13 +45,8 @@ protected void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_favorite);
ButterKnife.bind(this);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- mAppbarFavorite.setPadding(
- mAppbarFavorite.getPaddingLeft(),
- mAppbarFavorite.getPaddingTop() + DisplayUtils.getStatusBarHeight(this),
- mAppbarFavorite.getPaddingRight(),
- mAppbarFavorite.getPaddingBottom());
- }
+ StatusBarUtil.immersive(this);
+ StatusBarUtil.setPaddingSmart(this, mToolbarFavorite);
setSupportActionBar(mToolbarFavorite);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
diff --git a/app/src/main/java/me/bakumon/ugank/module/home/HomeActivity.java b/app/src/main/java/me/bakumon/ugank/module/home/HomeActivity.java
index 52df177..87e4f8f 100644
--- a/app/src/main/java/me/bakumon/ugank/module/home/HomeActivity.java
+++ b/app/src/main/java/me/bakumon/ugank/module/home/HomeActivity.java
@@ -1,12 +1,9 @@
package me.bakumon.ugank.module.home;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.content.pm.ActivityInfo;
-import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
@@ -18,7 +15,6 @@
import android.support.v7.widget.AppCompatImageView;
import android.support.v7.widget.Toolbar;
import android.view.View;
-import android.view.ViewGroup;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
@@ -40,6 +36,7 @@
import me.bakumon.ugank.module.setting.SettingActivity;
import me.bakumon.ugank.utills.DisplayUtils;
import me.bakumon.ugank.utills.MDTintUtil;
+import me.bakumon.ugank.utills.StatusBarUtil;
/**
* HomeActivity
@@ -91,19 +88,9 @@ protected void onDestroy() {
}
private void initView() {
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 4.4 以上版本
- // 设置 Toolbar 高度为 80dp,适配状态栏
- ViewGroup.LayoutParams layoutParams = mToolbar.getLayoutParams();
- layoutParams.height = DisplayUtils.dp2px(80, this);
- mToolbar.setLayoutParams(layoutParams);
- } else { // 4.4 一下版本
- // 设置 设置图标距离顶部(状态栏最底)为
- mIvSetting.setPadding(mIvSetting.getPaddingLeft(),
- DisplayUtils.dp2px(15, this),
- mIvSetting.getPaddingRight(),
- mIvSetting.getPaddingBottom());
- }
+ StatusBarUtil.immersive(this);
+ StatusBarUtil.setPaddingSmart(this, mIvHomeBanner);
+ StatusBarUtil.setPaddingSmart(this, mToolbar);
setFabDynamicState();
@@ -168,7 +155,6 @@ public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
layoutParams.height = DisplayUtils.dp2px(240, HomeActivity.this);
mAppBarLayout.setLayoutParams(layoutParams);
- isBannerBig = false;
}
} else {
if (state != CollapsingToolbarLayoutState.INTERNEDIATE) {
@@ -271,57 +257,6 @@ public void collection() {
startActivity(new Intent(HomeActivity.this, FavoriteActivity.class));
}
- private boolean isBannerBig; // banner 是否是大图
- private boolean isBannerAniming; // banner 放大缩小的动画是否正在执行
-
- @OnClick(R.id.iv_home_banner)
- public void wantBig(View view) {
- if (isBannerAniming) {
- return;
- }
- startBannerAnim();
- }
-
- private void startBannerAnim() {
- final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
- ValueAnimator animator;
- if (isBannerBig) {
- animator = ValueAnimator.ofInt(DisplayUtils.getScreenHeight(this), DisplayUtils.dp2px(240, this));
- } else {
- animator = ValueAnimator.ofInt(DisplayUtils.dp2px(240, this), DisplayUtils.getScreenHeight(this));
- }
- animator.setDuration(1000);
- animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator valueAnimator) {
- layoutParams.height = (int) valueAnimator.getAnimatedValue();
- mAppBarLayout.setLayoutParams(layoutParams);
- }
- });
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
- isBannerBig = !isBannerBig;
- isBannerAniming = false;
- }
- });
- animator.start();
- isBannerAniming = true;
- }
-
- @Override
- public void onBackPressed() {
- if (isBannerAniming) {
- return;
- }
- if (isBannerBig) {
- startBannerAnim();
- } else {
- super.onBackPressed();
- }
- }
-
@OnClick(R.id.iv_home_setting)
public void goSetting() {
startActivityForResult(new Intent(HomeActivity.this, SettingActivity.class), SETTING_REQUEST_CODE);
diff --git a/app/src/main/java/me/bakumon/ugank/module/search/SearchActivity.java b/app/src/main/java/me/bakumon/ugank/module/search/SearchActivity.java
index 5531c21..ad1e719 100644
--- a/app/src/main/java/me/bakumon/ugank/module/search/SearchActivity.java
+++ b/app/src/main/java/me/bakumon/ugank/module/search/SearchActivity.java
@@ -34,6 +34,7 @@
import me.bakumon.ugank.utills.DisplayUtils;
import me.bakumon.ugank.utills.KeyboardUtils;
import me.bakumon.ugank.utills.MDTintUtil;
+import me.bakumon.ugank.utills.StatusBarUtil;
import me.bakumon.ugank.widget.RecycleViewDivider;
import me.bakumon.ugank.widget.recyclerviewwithfooter.OnLoadMoreListener;
import me.bakumon.ugank.widget.recyclerviewwithfooter.RecyclerViewWithFooter;
@@ -79,14 +80,8 @@ protected void onCreate(Bundle savedInstanceState) {
private void initView() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- mAppbarSearch.setPadding(
- mAppbarSearch.getPaddingLeft(),
- mAppbarSearch.getPaddingTop() + DisplayUtils.getStatusBarHeight(this),
- mAppbarSearch.getPaddingRight(),
- mAppbarSearch.getPaddingBottom());
- }
-
+ StatusBarUtil.immersive(this);
+ StatusBarUtil.setPaddingSmart(this, mToolbarSearch);
setSupportActionBar(mToolbarSearch);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
diff --git a/app/src/main/java/me/bakumon/ugank/module/setting/SettingActivity.java b/app/src/main/java/me/bakumon/ugank/module/setting/SettingActivity.java
index 771b7e9..36ccc61 100644
--- a/app/src/main/java/me/bakumon/ugank/module/setting/SettingActivity.java
+++ b/app/src/main/java/me/bakumon/ugank/module/setting/SettingActivity.java
@@ -25,6 +25,7 @@
import me.bakumon.ugank.utills.AlipayZeroSdk;
import me.bakumon.ugank.utills.DisplayUtils;
import me.bakumon.ugank.utills.MDTintUtil;
+import me.bakumon.ugank.utills.StatusBarUtil;
import me.bakumon.ugank.widget.AboutDialog;
public class SettingActivity extends SwipeBackBaseActivity implements SettingContract.View, CompoundButton.OnCheckedChangeListener {
@@ -68,13 +69,8 @@ protected void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_setting);
ButterKnife.bind(this);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- mAppbarSetting.setPadding(
- mAppbarSetting.getPaddingLeft(),
- mAppbarSetting.getPaddingTop() + DisplayUtils.getStatusBarHeight(this),
- mAppbarSetting.getPaddingRight(),
- mAppbarSetting.getPaddingBottom());
- }
+ StatusBarUtil.immersive(this);
+ StatusBarUtil.setPaddingSmart(this, mAppbarSetting);
setSupportActionBar(mToolbarSetting);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
diff --git a/app/src/main/java/me/bakumon/ugank/module/webview/WebViewActivity.java b/app/src/main/java/me/bakumon/ugank/module/webview/WebViewActivity.java
index cbd003c..5aa52a4 100644
--- a/app/src/main/java/me/bakumon/ugank/module/webview/WebViewActivity.java
+++ b/app/src/main/java/me/bakumon/ugank/module/webview/WebViewActivity.java
@@ -2,7 +2,6 @@
import android.content.Intent;
import android.content.pm.ActivityInfo;
-import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.FloatingActionButton;
@@ -26,8 +25,8 @@
import me.bakumon.ugank.entity.Favorite;
import me.bakumon.ugank.module.favorite.FavoriteActivity;
import me.bakumon.ugank.utills.AndroidUtil;
-import me.bakumon.ugank.utills.DisplayUtils;
import me.bakumon.ugank.utills.MDTintUtil;
+import me.bakumon.ugank.utills.StatusBarUtil;
import me.bakumon.ugank.widget.ObservableWebView;
public class WebViewActivity extends SwipeBackBaseActivity implements WebViewContract.View {
@@ -59,13 +58,8 @@ protected void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_web_view);
ButterKnife.bind(this);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- mAppbar.setPadding(
- mAppbar.getPaddingLeft(),
- mAppbar.getPaddingTop() + DisplayUtils.getStatusBarHeight(this),
- mAppbar.getPaddingRight(),
- mAppbar.getPaddingBottom());
- }
+ StatusBarUtil.immersive(this);
+ StatusBarUtil.setPaddingSmart(this, mToolbar);
setSupportActionBar(mToolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
diff --git a/app/src/main/java/me/bakumon/ugank/utills/StatusBarUtil.java b/app/src/main/java/me/bakumon/ugank/utills/StatusBarUtil.java
new file mode 100644
index 0000000..e7def05
--- /dev/null
+++ b/app/src/main/java/me/bakumon/ugank/utills/StatusBarUtil.java
@@ -0,0 +1,287 @@
+package me.bakumon.ugank.utills;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Build;
+import android.support.annotation.FloatRange;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.regex.Pattern;
+
+/**
+ * 状态栏
+ * Created by bakumon on 17-7-8.
+ */
+@SuppressWarnings("unused")
+public class StatusBarUtil {
+ public static int DEFAULT_COLOR = 0;
+ public static float DEFAULT_ALPHA = 0;//Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? 0.2f : 0.3f;
+
+ //
+ public static void immersive(Activity activity) {
+ immersive(activity, DEFAULT_COLOR, DEFAULT_ALPHA);
+ }
+
+ public static void immersive(Activity activity, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {
+ immersive(activity.getWindow(), color, alpha);
+ }
+
+ public static void immersive(Activity activity, int color) {
+ immersive(activity.getWindow(), color, 1f);
+ }
+
+ public static void immersive(Window window) {
+ immersive(window, DEFAULT_COLOR, DEFAULT_ALPHA);
+ }
+
+ public static void immersive(Window window, int color) {
+ immersive(window, color, 1f);
+ }
+
+ public static void immersive(Window window, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {
+ if (Build.VERSION.SDK_INT >= 21) {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(mixtureColor(color, alpha));
+
+ int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
+ systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
+ window.getDecorView().setSystemUiVisibility(systemUiVisibility);
+ } else if (Build.VERSION.SDK_INT >= 19) {
+ window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);
+ } else if (Build.VERSION.SDK_INT >= 16) {
+ int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
+ systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
+ window.getDecorView().setSystemUiVisibility(systemUiVisibility);
+ }
+ }
+ //
+
+ //
+ public static void darkMode(Activity activity, boolean dark) {
+ if (isFlyme4Later()) {
+ darkModeForFlyme4(activity.getWindow(), dark);
+ } else if (isMIUI6Later()) {
+ darkModeForMIUI6(activity.getWindow(), dark);
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ darkModeForM(activity.getWindow(), dark);
+ }
+ }
+
+ /** 设置状态栏darkMode,字体颜色及icon变黑(目前支持MIUI6以上,Flyme4以上,Android M以上) */
+ public static void darkMode(Activity activity) {
+ darkMode(activity.getWindow(), DEFAULT_COLOR, DEFAULT_ALPHA);
+ }
+
+ public static void darkMode(Activity activity, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {
+ darkMode(activity.getWindow(), color, alpha);
+ }
+
+ /** 设置状态栏darkMode,字体颜色及icon变黑(目前支持MIUI6以上,Flyme4以上,Android M以上) */
+ public static void darkMode(Window window, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {
+ if (isFlyme4Later()) {
+ immersive(window,color,alpha);
+ darkModeForFlyme4(window, true);
+ } else if (isMIUI6Later()) {
+ immersive(window,color,alpha);
+ darkModeForMIUI6(window, true);
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ immersive(window, color, alpha);
+ darkModeForM(window, true);
+ } else if (Build.VERSION.SDK_INT >= 19) {
+ window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);
+ }
+// if (Build.VERSION.SDK_INT >= 21) {
+// window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+// window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+// window.setStatusBarColor(Color.TRANSPARENT);
+// } else if (Build.VERSION.SDK_INT >= 19) {
+// window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+// }
+
+// setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);
+ }
+
+ //------------------------->
+
+ /** android 6.0设置字体颜色 */
+ private static void darkModeForM(Window window, boolean dark) {
+// window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+// window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+// window.setStatusBarColor(Color.TRANSPARENT);
+
+ int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
+ if (dark) {
+ systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ } else {
+ systemUiVisibility &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ }
+ window.getDecorView().setSystemUiVisibility(systemUiVisibility);
+ }
+
+ /**
+ * 设置Flyme4+的darkMode,darkMode时候字体颜色及icon变黑
+ * http://open-wiki.flyme.cn/index.php?title=Flyme%E7%B3%BB%E7%BB%9FAPI
+ */
+ public static boolean darkModeForFlyme4(Window window, boolean dark) {
+ boolean result = false;
+ if (window != null) {
+ try {
+ WindowManager.LayoutParams lp = window.getAttributes();
+ Field darkFlag = WindowManager.LayoutParams.class
+ .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
+ Field meizuFlags = WindowManager.LayoutParams.class
+ .getDeclaredField("meizuFlags");
+ darkFlag.setAccessible(true);
+ meizuFlags.setAccessible(true);
+ int bit = darkFlag.getInt(null);
+ int value = meizuFlags.getInt(lp);
+ if (dark) {
+ value |= bit;
+ } else {
+ value &= ~bit;
+ }
+ meizuFlags.setInt(lp, value);
+ window.setAttributes(lp);
+ result = true;
+ } catch (Exception var8) {
+ Log.e("StatusBar", "darkIcon: failed");
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 设置MIUI6+的状态栏是否为darkMode,darkMode时候字体颜色及icon变黑
+ * http://dev.xiaomi.com/doc/p=4769/
+ */
+ public static boolean darkModeForMIUI6(Window window, boolean darkmode) {
+ Class extends Window> clazz = window.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(window, darkmode ? darkModeFlag : 0, darkModeFlag);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /** 判断是否Flyme4以上 */
+ public static boolean isFlyme4Later() {
+ return Build.FINGERPRINT.contains("Flyme_OS")
+ || Build.VERSION.INCREMENTAL.contains("Flyme_OS")
+ || Pattern.compile("Flyme OS [4|5]", Pattern.CASE_INSENSITIVE).matcher(Build.DISPLAY).find()
+ || Pattern.compile("Flyme", Pattern.CASE_INSENSITIVE).matcher(Build.DISPLAY).find()
+ || Build.FINGERPRINT.contains("Meizu");
+ }
+
+ /** 判断是否为MIUI6以上 */
+ public static boolean isMIUI6Later() {
+ try {
+ Class> clz = Class.forName("android.os.SystemProperties");
+ Method mtd = clz.getMethod("get", String.class);
+ String val = (String) mtd.invoke(null, "ro.miui.ui.version.name");
+ val = val.replaceAll("[vV]", "");
+ int version = Integer.parseInt(val);
+ return version >= 6;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ //
+
+
+ /** 增加View的paddingTop,增加的值为状态栏高度 */
+ public static void setPadding(Context context, View view) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),
+ view.getPaddingRight(), view.getPaddingBottom());
+ }
+ }
+ /** 增加View的paddingTop,增加的值为状态栏高度 (智能判断,并设置高度)*/
+ public static void setPaddingSmart(Context context, View view) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ ViewGroup.LayoutParams lp = view.getLayoutParams();
+ if (lp != null && lp.height > 0) {
+ lp.height += getStatusBarHeight(context);//增高
+ }
+ view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),
+ view.getPaddingRight(), view.getPaddingBottom());
+ }
+ }
+
+ /** 增加View的高度以及paddingTop,增加的值为状态栏高度.一般是在沉浸式全屏给ToolBar用的 */
+ public static void setHeightAndPadding(Context context, View view) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ ViewGroup.LayoutParams lp = view.getLayoutParams();
+ lp.height += getStatusBarHeight(context);//增高
+ view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),
+ view.getPaddingRight(), view.getPaddingBottom());
+ }
+ }
+ /** 增加View上边距(MarginTop)一般是给高度为 WARP_CONTENT 的小控件用的*/
+ public static void setMargin(Context context, View view) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ ViewGroup.LayoutParams lp = view.getLayoutParams();
+ if (lp instanceof ViewGroup.MarginLayoutParams) {
+ ((ViewGroup.MarginLayoutParams) lp).topMargin += getStatusBarHeight(context);//增高
+ }
+ view.setLayoutParams(lp);
+ }
+ }
+ /**
+ * 创建假的透明栏
+ */
+ public static void setTranslucentView(ViewGroup container, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {
+ if (Build.VERSION.SDK_INT >= 19) {
+ int mixtureColor = mixtureColor(color, alpha);
+ View translucentView = container.findViewById(android.R.id.custom);
+ if (translucentView == null && mixtureColor != 0) {
+ translucentView = new View(container.getContext());
+ translucentView.setId(android.R.id.custom);
+ ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(container.getContext()));
+ container.addView(translucentView, lp);
+ }
+ if (translucentView != null) {
+ translucentView.setBackgroundColor(mixtureColor);
+ }
+ }
+ }
+
+ public static int mixtureColor(int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {
+ int a = (color & 0xff000000) == 0 ? 0xff : color >>> 24;
+ return (color & 0x00ffffff) | (((int) (a * alpha)) << 24);
+ }
+
+ /** 获取状态栏高度 */
+ public static int getStatusBarHeight(Context context) {
+ int result = 24;
+ int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
+ if (resId > 0) {
+ result = context.getResources().getDimensionPixelSize(resId);
+ } else {
+ result = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ result, Resources.getSystem().getDisplayMetrics());
+ }
+ return result;
+ }
+}