Android 沉浸式改变小米魅族状态栏颜色的实例代码

这个是基于SystemBarTintManager更改的

增加一个方法:用于更改MIUIV6系统上的状态栏字体颜色 ,目前我仅仅只发现MIUIV6上可以更改,在android5.0上以及其它4.4以上系统没有发现可以更改字体颜色的代码

核心代码:

 public void setStatusBarDarkMode(boolean darkmode, Activity activity) {
  if (sIsMiuiV6) {
   Class<? extends Window> 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();
   }
  }
 } 

全部代码:

 /*
 * Copyright (C) 2013 readyState Software Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.util.DisplayMetrics;
 import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.FrameLayout.LayoutParams;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 /**
 * Class to manage status and navigation bar tint effects when using KitKat
 * translucent system UI modes.
 *
 */
 public class SystemBarTintManager {
 /**
  * The default system bar tint color value.
  */
 public static final int DEFAULT_TINT_COLOR = 0x99000000;
 private static String sNavBarOverride;
 private final SystemBarConfig mConfig;
 private boolean mStatusBarAvailable;
 private boolean mNavBarAvailable;
 private boolean mStatusBarTintEnabled;
 private boolean mNavBarTintEnabled;
 private View mStatusBarTintView;
 private View mNavBarTintView;
 private static boolean sIsMiuiV6;
 static {
  // Android allows a system property to override the presence of the navigation bar.
  // Used by the emulator.
  // See https://github.com/android/platform_frameworks_base/blob/master/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#L1076
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  try {
   Class c = Class.forName("android.os.SystemProperties");
   Method m = c.getDeclaredMethod("get", String.class);
   m.setAccessible(true);
   sIsMiuiV6 = "V6".equals((String) m.invoke(c, "ro.miui.ui.version.name"));
   sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");
  } catch (Throwable e) {
   sNavBarOverride = null;
  }
  }
 }
 /**
  * Constructor. Call this in the host activity onCreate method after its
  * content view has been set. You should always create new instances when
  * the host activity is recreated.
  *
  * @param activity The host activity.
  */
 @TargetApi(19)
 public SystemBarTintManager(Activity activity) {
  Window win = activity.getWindow();
  ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  // check theme attrs
  int[] attrs = {android.R.attr.windowTranslucentStatus,
   android.R.attr.windowTranslucentNavigation};
  TypedArray a = activity.obtainStyledAttributes(attrs);
  try {
   mStatusBarAvailable = a.getBoolean(0, false);
   mNavBarAvailable = a.getBoolean(1, false);
  } finally {
   a.recycle();
  }
  // check window flags
  WindowManager.LayoutParams winParams = win.getAttributes();
  int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
  if ((winParams.flags & bits) != 0) {
   mStatusBarAvailable = true;
  }
  bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
  if ((winParams.flags & bits) != 0) {
   mNavBarAvailable = true;
  }
  }
  mConfig = new SystemBarConfig(activity, mStatusBarAvailable, mNavBarAvailable);
  // device might not have virtual navigation keys
  if (!mConfig.hasNavigtionBar()) {
  mNavBarAvailable = false;
  }
  if (mStatusBarAvailable) {
  setupStatusBarView(activity, decorViewGroup);
  }
  if (mNavBarAvailable) {
  setupNavBarView(activity, decorViewGroup);
  }
 }
 /**
  * Enable tinting of the system status bar.
  *
  * If the platform is running Jelly Bean or earlier, or translucent system
  * UI modes have not been enabled in either the theme or via window flags,
  * then this method does nothing.
  *
  * @param enabled True to enable tinting, false to disable it (default).
  */
 public void setStatusBarTintEnabled(boolean enabled) {
  mStatusBarTintEnabled = enabled;
  if (mStatusBarAvailable) {
  mStatusBarTintView.setVisibility(enabled ? View.VISIBLE : View.GONE);
  }
 }
 /**
  * Enable tinting of the system navigation bar.
  *
  * If the platform does not have soft navigation keys, is running Jelly Bean
  * or earlier, or translucent system UI modes have not been enabled in either
  * the theme or via window flags, then this method does nothing.
  *
  * @param enabled True to enable tinting, false to disable it (default).
  */
 public void setNavigationBarTintEnabled(boolean enabled) {
  mNavBarTintEnabled = enabled;
  if (mNavBarAvailable) {
  mNavBarTintView.setVisibility(enabled ? View.VISIBLE : View.GONE);
  }
 }
 /**
  * Apply the specified color tint to all system UI bars.
  *
  * @param color The color of the background tint.
  */
 public void setTintColor(int color) {
  setStatusBarTintColor(color);
  setNavigationBarTintColor(color);
 }
 /**
  * Apply the specified drawable or color resource to all system UI bars.
  *
  * @param res The identifier of the resource.
  */
 public void setTintResource(int res) {
  setStatusBarTintResource(res);
  setNavigationBarTintResource(res);
 }
 /**
  * Apply the specified drawable to all system UI bars.
  *
  * @param drawable The drawable to use as the background, or null to remove it.
  */
 public void setTintDrawable(Drawable drawable) {
  setStatusBarTintDrawable(drawable);
  setNavigationBarTintDrawable(drawable);
 }
 /**
  * Apply the specified alpha to all system UI bars.
  *
  * @param alpha The alpha to use
  */
 public void setTintAlpha(float alpha) {
  setStatusBarAlpha(alpha);
  setNavigationBarAlpha(alpha);
 }
 /**
  * Apply the specified color tint to the system status bar.
  *
  * @param color The color of the background tint.
  */
 public void setStatusBarTintColor(int color) {
  if (mStatusBarAvailable) {
  mStatusBarTintView.setBackgroundColor(color);
  }
 }
 /**
  * Apply the specified drawable or color resource to the system status bar.
  *
  * @param res The identifier of the resource.
  */
 public void setStatusBarTintResource(int res) {
  if (mStatusBarAvailable) {
  mStatusBarTintView.setBackgroundResource(res);
  }
 }
 /**
  * Apply the specified drawable to the system status bar.
  *
  * @param drawable The drawable to use as the background, or null to remove it.
  */
 @SuppressWarnings("deprecation")
 public void setStatusBarTintDrawable(Drawable drawable) {
  if (mStatusBarAvailable) {
  mStatusBarTintView.setBackgroundDrawable(drawable);
  }
 }
 /**
  * Apply the specified alpha to the system status bar.
  *
  * @param alpha The alpha to use
  */
 @TargetApi(11)
 public void setStatusBarAlpha(float alpha) {
  if (mStatusBarAvailable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  mStatusBarTintView.setAlpha(alpha);
  }
 }
 /**
  * Apply the specified color tint to the system navigation bar.
  *
  * @param color The color of the background tint.
  */
 public void setNavigationBarTintColor(int color) {
  if (mNavBarAvailable) {
  mNavBarTintView.setBackgroundColor(color);
  }
 }
 /**
  * Apply the specified drawable or color resource to the system navigation bar.
  *
  * @param res The identifier of the resource.
  */
 public void setNavigationBarTintResource(int res) {
  if (mNavBarAvailable) {
  mNavBarTintView.setBackgroundResource(res);
  }
 }
 /**
  * Apply the specified drawable to the system navigation bar.
  *
  * @param drawable The drawable to use as the background, or null to remove it.
  */
 @SuppressWarnings("deprecation")
 public void setNavigationBarTintDrawable(Drawable drawable) {
  if (mNavBarAvailable) {
  mNavBarTintView.setBackgroundDrawable(drawable);
  }
 }
 /**
  * Apply the specified alpha to the system navigation bar.
  *
  * @param alpha The alpha to use
  */
 @TargetApi(11)
 public void setNavigationBarAlpha(float alpha) {
  if (mNavBarAvailable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  mNavBarTintView.setAlpha(alpha);
  }
 }
 /**
  * Get the system bar configuration.
  *
  * @return The system bar configuration for the current device configuration.
  */
 public SystemBarConfig getConfig() {
  return mConfig;
 }
 /**
  * Is tinting enabled for the system status bar?
  *
  * @return True if enabled, False otherwise.
  */
 public boolean isStatusBarTintEnabled() {
  return mStatusBarTintEnabled;
 }
 /**
  * Is tinting enabled for the system navigation bar?
  *
  * @return True if enabled, False otherwise.
  */
 public boolean isNavBarTintEnabled() {
  return mNavBarTintEnabled;
 }
 private void setupStatusBarView(Context context, ViewGroup decorViewGroup) {
  mStatusBarTintView = new View(context);
  LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getStatusBarHeight());
  params.gravity = Gravity.TOP;
  if (mNavBarAvailable && !mConfig.isNavigationAtBottom()) {
  params.rightMargin = mConfig.getNavigationBarWidth();
  }
  mStatusBarTintView.setLayoutParams(params);
  mStatusBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR);
  mStatusBarTintView.setVisibility(View.GONE);
  decorViewGroup.addView(mStatusBarTintView);
 }
 private void setupNavBarView(Context context, ViewGroup decorViewGroup) {
  mNavBarTintView = new View(context);
  LayoutParams params;
  if (mConfig.isNavigationAtBottom()) {
  params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getNavigationBarHeight());
  params.gravity = Gravity.BOTTOM;
  } else {
  params = new LayoutParams(mConfig.getNavigationBarWidth(), LayoutParams.MATCH_PARENT);
  params.gravity = Gravity.RIGHT;
  }
  mNavBarTintView.setLayoutParams(params);
  mNavBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR);
  mNavBarTintView.setVisibility(View.GONE);
  decorViewGroup.addView(mNavBarTintView);
 }
 /**
  * Class which describes system bar sizing and other characteristics for the current
  * device configuration.
  *
  */
 public static class SystemBarConfig {
  private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height";
  private static final String NAV_BAR_HEIGHT_RES_NAME = "navigation_bar_height";
  private static final String NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME = "navigation_bar_height_landscape";
  private static final String NAV_BAR_WIDTH_RES_NAME = "navigation_bar_width";
  private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar";
  private final boolean mTranslucentStatusBar;
  private final boolean mTranslucentNavBar;
  private final int mStatusBarHeight;
  private final int mActionBarHeight;
  private final boolean mHasNavigationBar;
  private final int mNavigationBarHeight;
  private final int mNavigationBarWidth;
  private final boolean mInPortrait;
  private final float mSmallestWidthDp;
  private SystemBarConfig(Activity activity, boolean translucentStatusBar, boolean traslucentNavBar) {
  Resources res = activity.getResources();
  mInPortrait = (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT);
  mSmallestWidthDp = getSmallestWidthDp(activity);
  mStatusBarHeight = getInternalDimensionSize(res, STATUS_BAR_HEIGHT_RES_NAME);
  mActionBarHeight = getActionBarHeight(activity);
  mNavigationBarHeight = getNavigationBarHeight(activity);
  mNavigationBarWidth = getNavigationBarWidth(activity);
  mHasNavigationBar = (mNavigationBarHeight > 0);
  mTranslucentStatusBar = translucentStatusBar;
  mTranslucentNavBar = traslucentNavBar;
  }
  @TargetApi(14)
  private int getActionBarHeight(Context context) {
  int result = 0;
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
   TypedValue tv = new TypedValue();
   context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
   result = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
  }
  return result;
  }
  @TargetApi(14)
  private int getNavigationBarHeight(Context context) {
  Resources res = context.getResources();
  int result = 0;
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
   if (hasNavBar(context)) {
   String key;
   if (mInPortrait) {
    key = NAV_BAR_HEIGHT_RES_NAME;
   } else {
    key = NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME;
   }
   return getInternalDimensionSize(res, key);
   }
  }
  return result;
  }
  @TargetApi(14)
  private int getNavigationBarWidth(Context context) {
  Resources res = context.getResources();
  int result = 0;
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
   if (hasNavBar(context)) {
   return getInternalDimensionSize(res, NAV_BAR_WIDTH_RES_NAME);
   }
  }
  return result;
  }
  @TargetApi(14)
  private boolean hasNavBar(Context context) {
  Resources res = context.getResources();
  int resourceId = res.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android");
  if (resourceId != 0) {
   boolean hasNav = res.getBoolean(resourceId);
   // check override flag (see static block)
   if ("1".equals(sNavBarOverride)) {
   hasNav = false;
   } else if ("0".equals(sNavBarOverride)) {
   hasNav = true;
   }
   return hasNav;
  } else { // fallback
   return !ViewConfiguration.get(context).hasPermanentMenuKey();
  }
  }
  private int getInternalDimensionSize(Resources res, String key) {
  int result = 0;
  int resourceId = res.getIdentifier(key, "dimen", "android");
  if (resourceId > 0) {
   result = res.getDimensionPixelSize(resourceId);
  }
  return result;
  }
  @SuppressLint("NewApi")
  private float getSmallestWidthDp(Activity activity) {
  DisplayMetrics metrics = new DisplayMetrics();
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
   activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
  } else {
   // TODO this is not correct, but we don't really care pre-kitkat
   activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
  }
  float widthDp = metrics.widthPixels / metrics.density;
  float heightDp = metrics.heightPixels / metrics.density;
  return Math.min(widthDp, heightDp);
  }
  /**
  * Should a navigation bar appear at the bottom of the screen in the current
  * device configuration? A navigation bar may appear on the right side of
  * the screen in certain configurations.
  *
  * @return True if navigation should appear at the bottom of the screen, False otherwise.
  */
  public boolean isNavigationAtBottom() {
  return (mSmallestWidthDp >= 600 || mInPortrait);
  }
  /**
  * Get the height of the system status bar.
  *
  * @return The height of the status bar (in pixels).
  */
  public int getStatusBarHeight() {
  return mStatusBarHeight;
  }
  /**
  * Get the height of the action bar.
  *
  * @return The height of the action bar (in pixels).
  */
  public int getActionBarHeight() {
  return mActionBarHeight;
  }
  /**
  * Does this device have a system navigation bar?
  *
  * @return True if this device uses soft key navigation, False otherwise.
  */
  public boolean hasNavigtionBar() {
  return mHasNavigationBar;
  }
  /**
  * Get the height of the system navigation bar.
  *
  * @return The height of the navigation bar (in pixels). If the device does not have
  * soft navigation keys, this will always return 0.
  */
  public int getNavigationBarHeight() {
  return mNavigationBarHeight;
  }
  /**
  * Get the width of the system navigation bar when it is placed vertically on the screen.
  *
  * @return The width of the navigation bar (in pixels). If the device does not have
  * soft navigation keys, this will always return 0.
  */
  public int getNavigationBarWidth() {
  return mNavigationBarWidth;
  }
  /**
  * Get the layout inset for any system UI that appears at the top of the screen.
  *
  * @param withActionBar True to include the height of the action bar, False otherwise.
  * @return The layout inset (in pixels).
  */
  public int getPixelInsetTop(boolean withActionBar) {
  return (mTranslucentStatusBar ? mStatusBarHeight : 0) + (withActionBar ? mActionBarHeight : 0);
  }
  /**
  * Get the layout inset for any system UI that appears at the bottom of the screen.
  *
  * @return The layout inset (in pixels).
  */
  public int getPixelInsetBottom() {
  if (mTranslucentNavBar && isNavigationAtBottom()) {
   return mNavigationBarHeight;
  } else {
   return 0;
  }
  }
  /**
  * Get the layout inset for any system UI that appears at the right of the screen.
  *
  * @return The layout inset (in pixels).
  */
  public int getPixelInsetRight() {
  if (mTranslucentNavBar && !isNavigationAtBottom()) {
   return mNavigationBarWidth;
  } else {
   return 0;
  }
  }
 }
 public void setStatusBarDarkMode(boolean darkmode, Activity activity) {
  if (sIsMiuiV6) {
   Class<? extends Window> 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();
   }
  }
 }
 } 

用法:

 public void initSystemBar(){
  if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  fwRootLayout.setFitsSystemWindows(true);//需要把根布局设置为这个属性 子布局则不会占用状态栏位置
  fwRootLayout.setClipToPadding(true);//需要把根布局设置为这个属性 子布局则不会占用状态栏位置
  }
  tintManager = new SystemBarTintManager(this);// 创建状态栏的管理实例
  tintManager.setStatusBarTintEnabled(true);// 激活状态栏设置
  tintManager.setNavigationBarTintEnabled(true);// 激活导航栏设置
  tintManager.setStatusBarTintColor(getResources().getColor(R.color.blue500));//设置状态栏颜色
  tintManager.setStatusBarDarkMode(false, this);//false 状态栏字体颜色是白色 true 颜色是黑色
 } 

截图

 

以上所述是小编给大家介绍的Android 沉浸式改变小米魅族状态栏颜色的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android沉浸式状态栏实现

    苹果上的UI基本上都是这个效果,然而Android机上的顶部状态栏总是和app的主题颜色不搭.还好如今的api19以上的版本,我们也能做出这样的效果. 第一步: // 需要setContentView之前调用 private void setTranslucentStatus() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 透明状态栏 getWindow().addFlags( WindowManager.Lay

  • 另外两种Android沉浸式状态栏实现思路

    关于沉浸式状态栏相信大家都不陌生,IOS系统很早就有,android5.0及以后版本都支持给状态栏着色,而目前android主流版本还是4.4,网上通用实现4.4(API19)沉浸式状态栏也都是依赖于可以将状态栏变为透明的属性,再为其着色,主要实现代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout

  • Android 实现沉浸式状态栏的方法

    沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了.于是沉浸模式成了沉浸式状态栏. 我们先来看下具体的效果 开启沉浸模式后,状态栏消失,从顶部向下滑动,状态栏出现,退出沉浸模式,状态栏也出现了. 我们的代码基于前一篇文章.首先是两个开启沉浸模式和关闭沉浸模式的函数 @SuppressLint("NewApi") public static void hideSystemUI(View view) { view.setSystemUiVisibi

  • Android之沉浸式状态栏的实现方法、状态栏透明

    现在越来越多的软件都开始使用沉浸式状态栏了,下面总结一下沉浸式状态栏的两种使用方法 注意!沉浸式状态栏只支持安卓4.4及以上的版本 状态栏:4.4上是渐变色,5.0上是完全透明,本文模拟器为4.4演示 效果图: 注意!两种方法的区别: 第一种:为顶部栏跟随当前activity的布局文件的背景的颜色,使用方便,不过也有点问题就是,如果有底部虚拟导航键的话,导航键的背景跟顶部的颜色一样,比如: 第二种:是通过设置顶部栏的颜色来显示的,可以解决第一种的不足,比如: 第一种使用方法: 第一.首先在val

  • Android 4.4以上"沉浸式"状态栏效果的实现方法

    什么是沉浸式状态栏? 沉浸式状态栏意思指状态栏的颜色随着软件颜色而改变,使状态栏和软件颜色保持一致,沉浸其中!当我们打开应用程序时,不会再因为看到应用程序和状态栏的黑边相隔开而感到十分难看.沉浸式状态栏由于其能给用户群体带来极佳的用户体验,已经在越来越多的应用上得到了体现. 实现原理 从4.4后系统增加了透明状态栏的特性WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 一旦添加上这个属性后,那么布局中的内容DecorView就会自动填充到状态栏

  • 详解Android中的沉浸式状态栏效果实例

    无意间了解到沉浸式状态栏,感觉贼拉的高大上,于是就是试着去了解一下,就有了这篇文章.下面就来了解一下啥叫沉浸式状态栏.传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这一样就在一定程度上牺牲了视觉宽度,界面面积变小. Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7

  • Android实现沉浸式状态栏

    前段时间,项目中用到了沉浸式的状态栏,在此记录一下,代码如下: package com.jackie.immersive; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity { @Overrid

  • Android透明化和沉浸式状态栏实践及源码分析

    本文所提到的透明状态栏其实指的是将顶部的导航栏延伸到状态栏,使之浑然一体(Google官方建议状态栏颜色比导航栏的颜色略深一点),并不代表一定不设置背景色,比如导航栏是白色,则可设置状态栏为白色,视情况而定. 相比于iOS系统,Android系统对于状态栏的设置就显得稍微复杂了一点.Android系统提供了API 19以上对状态栏的设置接口,而直到API 23以上才提供对于icon颜色的设置,还有就是各家厂商(如魅族,小米等)对于状态栏的有自己的定制,对于需要使用浅色背景状态栏的应用,没处理好的

  • Android 沉浸式状态栏及悬浮效果

    一.概述 现在大多数的电商APP的详情页长得几乎都差不多,几乎都是上面一个商品的图片,当你滑动的时候,会有Tab悬浮在上面,这样做用户体验确实不错,如果Tab滑上去,用户可能还需要滑下来,在来点击Tab,这样确实很麻烦.沉浸式状态栏那,郭霖说过谷歌并没有给出沉浸式状态栏这个明白,谷歌只说了沉浸式模式(Immersive Mode).不过沉浸式状态栏这个名字其实听不粗,随大众吧,但是Android的环境并没有iOS环境一样特别统一,比如华为rom的跟小米rom的虚拟按键完全不一样,所有Androi

  • Android沉浸式状态栏微技巧(带你真正理解沉浸式模式)

    其实说到沉浸式状态栏这个名字我也是感到很无奈,真不知道这种叫法是谁先发起的.因为Android官方从来没有给出过沉浸式状态栏这样的命名,只有沉浸式模式(Immersive Mode)这种说法.而有些人在没有完全了解清楚沉浸模式到底是什么东西的情况下,就张冠李戴地认为一些系统提供的状态栏操作就是沉浸式的,并且还起了一个沉浸式状态栏的名字. 比如之前就有一个QQ群友问过我,像饿了么这样的沉浸式状态栏效果该如何实现? 这个效果其实就是让背景图片可以利用系统状态栏的空间,从而能够让背景图和状态栏融为一体

随机推荐