您的位置:首页 > 移动开发 > Android开发

更改状态栏里面图标字体颜色

2017-09-29 10:00 274 查看


上面点击不同fragment,显示状态栏字体的不同颜色,比如“中国移动”,显示颜色不一样

亲测:在android 7.0以及以上实现起来很容易,7.0以下难以实现。



7.0以下难以实现,因为很多手机厂商都对状态栏主题重写了,除非他们公开代码,不然难以实现。为了不至于太难看,低于7.0版本的就用半透明状态栏,这样看起来不太过于突兀。

//4.4系统是直接生成一个view和状态栏宽高相等,覆盖在状态栏上,改变这个新生成的view背景颜色即可
View view = new View(MainActivity.this);
view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
view.getLayoutParams().height = getStatusBarHeight();


//获取状态栏的高度
private int getStatusBarHeight() {
int statusBarHeight = 0;
Resources res = MainActivity.this.getResources();
int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = res.getDimensionPixelSize(resourceId);
}
return statusBarHeight;
}


//下面是修改状态栏颜色或者状态栏色调
private void setStatueBarColor(int color) {
Window window = MainActivity.this.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT <= 20) {
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ViewGroup decorView = (ViewGroup) window.getDecorView();
int indexOfChild = decorView.indexOfChild(view);
//因为mainActivity底部导航栏不停的点击,防止view被重复添加
if (indexOfChild == -1) {
decorView.addView(view);
} else {
view = decorView.getChildAt(indexOfChild);
}
view.setBackgroundColor(color);
}

//5.0到6.0修改状态栏颜色
if (Build.VERSION.SDK_INT > 20 && Build.VERSION.SDK_INT < 23) {
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(color);
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (color == ContextCompat.getColor(this, R.color.transparent_background)) {
//设置状态栏图标文字深色
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
//设置状态栏图标文字白色
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息