[置顶] android白色背景状态栏字体颜色
2017-02-08 13:59
447 查看
改变状态栏颜色的仿佛只能用于小米,魅族,已经6.0以上的手机,vivo系统源码不开发,所以没办法修改,直接上代码
小编发现一个小问题,就是对于华为有下部虚拟导航栏的手机来说说,可能会江虚拟导航栏变成白色或者透明四,最好最后把BarTextColorUtils中的activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);注掉试试
或者大家也可收索一下全局,能不能搜索到FLAG_TRANSLUCENT_NAVIGATION这个字段,不要把底部设置为透明就可以了,由于我身边没有手机,所以这仅仅作为提示
import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.os.Build; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import com.jaeger.library.StatusBarView; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Created by dell on 2016/10/26. */ public class BarTextColorUtils { public static int StatusBarLightMode(Activity activity){ int result=0; //这个方法只支持4.0以上系统 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if(MIUISetStatusBarLightMode(activity.getWindow(), true)){//判断是不是小米系统 result=1; }else if(FlymeSetStatusBarLightMode(activity.getWindow(), true)){//判断是不是魅族系统 result=2; }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前是不是6.0以上的系统 activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); result=3; }else {//如果以上都不符合就只能加个半透明的背景色了 result=4; setTranslucentForCoordinatorLayout(activity, 70); } } return result; } //带有透明颜色的状态栏 public static void setTranslucentForCoordinatorLayout(Activity activity, int statusBarAlpha) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { return; } transparentStatusBar(activity);//先将状态栏设置为完全透明 addTranslucentView(activity, statusBarAlpha);//添加一个自定义透明度的矩形状态栏 } /** * 使状态栏透明 */ @TargetApi(Build.VERSION_CODES.KITKAT) private static void transparentStatusBar(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); activity.getWindow().setStatusBarColor(Color.TRANSPARENT); } else { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } /** * 添加半透明矩形条 * * @param activity 需要设置的 activity * @param statusBarAlpha 透明值 */ private static void addTranslucentView(Activity activity, int statusBarAlpha) { ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content); if (contentView.getChildCount() > 1) { contentView.getChildAt(1).setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0)); } else { contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha)); } } /** * 创建半透明矩形 View * * @param alpha 透明值 * @return 半透明 View */ private static StatusBarView createTranslucentStatusBarView(Activity activity, int alpha) { // 绘制一个和状态栏一样高的矩形 StatusBarView statusBarView = new StatusBarView(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)); statusBarView.setLayoutParams(params); statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0)); return statusBarView; } /** * 获取状态栏高度 * * @param context context * @return 状态栏高度 */ private static int getStatusBarHeight(Context context) { // 获得状态栏高度 int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); return context.getResources().getDimensionPixelSize(resourceId); } /** * 修改小米手机系统的 * @param window * @param dark * @return */ public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) { boolean result = false; if (window != null) { 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); if(dark){ extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体 }else{ extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体 } result=true; }catch (Exception e){ } } return result; } /** * 魅族手机修改该字体颜色 * @param window * @param dark * @return */ public static boolean FlymeSetStatusBarLightMode(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 e) { } } return result; } }
小编发现一个小问题,就是对于华为有下部虚拟导航栏的手机来说说,可能会江虚拟导航栏变成白色或者透明四,最好最后把BarTextColorUtils中的activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);注掉试试
或者大家也可收索一下全局,能不能搜索到FLAG_TRANSLUCENT_NAVIGATION这个字段,不要把底部设置为透明就可以了,由于我身边没有手机,所以这仅仅作为提示
相关文章推荐
- Android 沉浸式状态栏-字体颜色与背景颜色修改实现与兼容
- Android系统状态栏字体颜色在暗色背景和亮色背景下的改变方法
- 关于Android沉浸式状态栏字体颜色和图片背景自适应变化
- android主题Theme.Holo.Light下如何设置程序的标题字体颜色为白色 分类: Android界面和组件 2014-06-21 14:02 327人阅读 评论(0) 收藏
- Android 自定义 spinner (背景、字体颜色)
- Android 自定义 spinner (背景、字体颜色)
- 改变Android的hello world程序字体颜色和背景颜色
- Android 自定义 spinner (背景、字体颜色)
- android颜色关于Android TabHost切换Tab字体的颜色背景颜色改变
- 界面上有几个球队名字的列表,将鼠标放到球队名字上就变为红色背景,其他球队背景颜色为白色,点击一个球队的时候就将点击的球队变为fontSize=30字体(fontSize=‘’回到默认)。
- [原]界面上有几个球队名字的列表,将鼠标放到球队名字上就变为红色背景,其他球队背景颜色为白色,点击一个球队的时候就将点击的球队变为fontSize=30字体(fontSize=‘’回到默认)。
- ios--状态栏统一样式:黑色背景白色字体
- 改变Android的hello world程序字体颜色和背景颜色
- 消除android的标题和状态栏,获取窗口大小以及消除窗口的背景颜色。
- iOS8中如何将状态栏的字体颜色改为白色
- 初学Android应用程序——资源文件、文字、字体颜色、文字背景颜色、按钮
- ios 设置状态栏字体颜色为白色
- Android-解决AutoCompleteText下拉提示的字体颜色是白色的问题
- android之spinner背景、字体颜色
- (二)iOS如何把所有界面的状态栏的字体颜色都设置为白色