android开发 修改标题栏背景_android开发修改状态栏背景色和图标颜色
修改状态栏背景色和图标颜色
默认是黑底白字的,现在要改为白底黑字的
先看下效果图:
Screenshot_2018-01-03-19-20-27-797_com.yiban1314..png
1、状态栏背景是白色: 在style中设置
@color/white
2、写修改状态栏图标的颜色(暂时只知道黑色和白色)
public class StatusBarUtil {
/**
* 修改状态栏为全透明
* @param activity
*/
@TargetApi(19)
public static void transparencyBar(Activity activity){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
} else
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window =activity.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
/**
* 修改状态栏颜色,支持4.4以上版本
* @param activity
* @param colorId
*/
public static void setStatusBarColor(Activity activity,int colorId) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
//window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
window.setStatusBarColor(activity.getResources().getColor(colorId));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明
transparencyBar(activity);
SystemBarTintManager tintManager = new SystemBarTintManager(activity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(colorId);
}
}
/**
*状态栏亮色模式,设置状态栏黑色文字、图标,
* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
* @param activity
* @return 1:MIUUI 2:Flyme 3:android6.0
*/
public static int statusBarLightMode(Activity activity){
int result=0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if(MIUISetStatusBarLightMode(activity, true)){
result=1;
}else if(FlymeSetStatusBarLightMode(activity.getWindow(), true)){
result=2;
}else {
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
result=3;
}
}
return result;
}
/**
* 设置状态栏图标为深色和魅族特定的文字风格
* 可以用来判断是否为Flyme用户
* @param window 需要设置的窗口
* @param dark 是否把状态栏文字及图标颜色设置为深色
* @return boolean 成功执行返回true
*
*/
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;
}
/**
* 需要MIUIV6以上
* @param activity
* @param dark 是否把状态栏文字及图标颜色设置为深色
* @return boolean 成功执行返回true
*
*/
public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
boolean result = false;
Window window=activity.getWindow();
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;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
if(dark){
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}else {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
}catch (Exception e){
}
}
return result;
}}
上面代码是https://www.jianshu.com/p/7f5a9969be53上找到,具体可以去看看
3、具体引用列子
在BaseActivity中
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityUtils.add(this, getClass());
mContext = this;
StatusBarUtil.statusBarLightMode(this);
}
4、正常状态栏已经改变
状态栏是改变了,但你会看到整个activity布局都会上移充满整个屏幕
解决方法1:在style中的AppTheme添加
true
如果添加上面代码布局下移了且不会影响到其他的东西。那就不用往下看了
android:fitsSystemWindows很坑,很多弹框的样式都有问题
解决方法2:自己为每个布局添加paddingTop
LibUtils:
/**
* 获取状态栏高度
* @return
*/
public static 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 static void setLayoutPadding(Activity activity, View contentLayout) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
contentLayout
.setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(),
contentLayout.getPaddingRight(), contentLayout.getPaddingBottom());
}
}
引用地方:
protected void onCreate(@NonNull Bundle savedInstanceState, int resId, int titleId) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.activity_base);
StatusBarUtil.statusBarLightMode(this);
LibUtils.setLayoutPadding(this,((ViewGroup)findViewById(android.R.id.content)).getChildAt(0));}
注:LibUtils.setLayoutPadding调用要做setContentView后面,android.R.id.content是获取每个布局的根布局,不理解自行百度
还要考虑android版本的问题,一般5.0下的系统还是用默认的
有问题请留言
android开发 修改标题栏背景_android开发修改状态栏背景色和图标颜色相关推荐
- android状态栏背景色和图标颜色更改总结
通过若干种方法来实现状态栏背景和图标变色 注意事项:api 23才支持状态栏图标变色,所以图标变色会在编译api>=23中实现 一 Android 4.4 之前状态栏默认黑色,不能改变 二 An ...
- android开发 修改标题栏背景_Android哆啦A梦调试工具体验
滴滴开发调试工具(https://github.com/didi/DoraemonKit)是滴滴开源的一款功能齐全的客户端( iOS .Android )研发助手 是什么 用图说话,这个调试工具其实就 ...
- Android 设置状态栏背景颜色和状态栏文字、图标颜色
纯抄的,记录学习,感谢原文作者 原文:https://www.jianshu.com/p/5a54b2c3ea05 Android 4.4(API 19)之后,就提供了修改状态栏颜色的方法,但是在 A ...
- android开发 修改标题栏背景_移动开发整体凉凉的背景下,究竟还剩哪些 Android热门前沿知识...
1. Android架构设计模式 MVC架构设计模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVP架构 ...
- android开发 修改标题栏背景_基于.NET的APP开发方式中MobileForm的使用smobiler
样式一 一. Toolbar 1. 目标样式 我们要实现上图中的效果,需要如下的操作: 2. 修改属性 a. 修改Mobile Form的Toolbar属性 获取窗体底部工具栏,打开集合编辑器,并点击 ...
- android开发 修改标题栏背景_更改标题栏(Android)中的文字和背景颜色?
我构建了一个 Android应用程序,我正在尝试更改标题的栏背景和文本颜色. 在AndroidManifest.xml中: ... android:theme="@style/ThemeSe ...
- android 中间凹背景_Android开发仿百度地图的凹陷BottomNavigationView
释放双眼,带上耳机,听听看~! 百度的: 71529789c6c948803e1075c2c7e00809.jpg 我的: e9347423eb2031228af77ad63d7b01d7.jpg 使 ...
- android引用的java包_Android开发中jar包的创建及引用
jar包有两种,一种是纯粹的库功能,没有main入口函数,故无法直接执行:一种是包含main的可执行包! 如有hello/hello.java文件: $ cd hello/$ javac hello. ...
- android 代码设置居右_Android 开发实现EditText 光标居右显示
Android 开发实现EditText 光标居右显示 前言: 有些时候肯定会遇到这种奇葩的需求,光标要靠右显示,因为Android里面光标默认是靠左显示的,那怎么实现呢,肯定有办法的,这里提供一种实 ...
最新文章
- go 1.4支持Android的说明(译文)
- pdf文件之itextpdf插入html内容以及中文解决方案
- SwfUpload及imgareaselect使用方法
- .net的字符串插值,格式化字符串
- 文巾解题 231. 2的幂
- 使用fio测试磁盘I/O性能
- c# ComboBox禁用鼠标滚轮
- SDUT 2138 图结构练习——BFSDFS——判断可达性
- 【转帖】MATLAB中用FDATool设计滤波器及使用
- JAVA HD japan_小米小爱AI音箱HD【硬件分析】,你了解智能音箱吗
- window常用设置和命令
- 谷歌浏览器导入插件教程
- matlab受力分析,基于Matlab的多支座蒸压釜的受力分析和强度计算
- 学习Linux/Unix这么久了,你真的知道什么是终端吗?
- 外设驱动库开发笔记33:LCD1602液晶显示屏驱动
- jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/undelegate
- VOS3000,呼叫中心服务器和软交换状态显示红灯实际后台服务都在线的原因
- 解决WORD2013输入时光标老跳的问题
- 反掩码/掩码/通配符详解
- 我喜欢一个人白天静静走在城市的街头
热门文章
- 微信公众号最佳实践 ( 4.7)获取用户地理位置
- “AI安全”风起云涌,拿下A轮融资的瑞莱智慧如何与群雄共舞?
- 《从0到1:CTFer成长之路》SQL注入-2
- EasyClick iOS脚本免越狱免硬件实现方案_可云控大量部署
- 本周XR新闻:吴德周成立AR硬件公司,SideQuest支持PICO、Magic Leap
- 音频输出设备是如何决定的
- 罗尔定理与零点定理判断实际应用与判断
- matlab求解一阶微分方程组
- 参考file-convert-util工具,实现doc,docx,html,md,pdf,png转换
- 蓝奏云软件库源码分享下载