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 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; + } +}