沉侵式状态栏

沉侵式状态栏:Translucent Bars

一、半透明状态栏

Android 4.4开始,便引入了Translucent System Bar的特性,支持设置半透明状态栏.

1、values-19的styles中设置

<style name="StatusBarTheme" parent="AppBaseTheme">
	<item name="android:windowTranslucentStatus">true</item>
	<item name="android:windowTranslucentNavigation">true</item>
</style>

2、也可以通过代码设置
在setContentView之后

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
		setTranslucentStatus(true);
	}
private void setTranslucentStatus(boolean on) {
		Window win = getWindow();
		WindowManager.LayoutParams winParams = win.getAttributes();
		final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
		if (on) {
			winParams.flags |= bits;
		} else {
			winParams.flags &= ~bits;
		}
		win.setAttributes(winParams);
	}	
实际开发中,一般还需要将根布局的android:fitsSystemWindows="true",留出statusBar高度,避免标题栏与statusBar产生重叠。

二、statusBarColor
android5.0开始才有statusBarColor属性,支持设置状态栏颜色
1、values-21的styles中设置

<style name="StatusBarTheme" parent="AppBaseTheme">
   <item name="android:windowTranslucentStatus">false</item>
	<item name="android:windowTranslucentNavigation">true</item>
	<!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
	<item name="android:statusBarColor">@android:color/transparent</item>
</style>

设置statusBarColor为transparent,是为了在代码中动态设置状态栏颜色。

注意:android:windowTranslucentStatus和android:statusBarColor只能用一个,所以如果要设置statusBarColor,需要设置windowTranslucentStatus=false

2、在代码中设置statusBarColor
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
		getWindow().setStatusBarColor(Color.RED);
  }

三、同时保证4.4和5.0效果一致

默认情况下,4.4和5.0的效果是不一致的,为了保持4.4和5.0的效果一致,我们创建一个与statusBar等高的view,添加到我们的window根布局中,用于设置状态栏颜色

Window win = activity.getWindow();
ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();
View mStatusBarTintView = new View(context);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getStatusBarHeight());
params.gravity = Gravity.TOP;
mStatusBarTintView.setLayoutParams(params);
mStatusBarTintView.setBackgroundColor(STATUS_COLOR);
decorViewGroup.addView(mStatusBarTintView);

四、SystemBarTint

SystemBarTint是一个针对沉侵式状态栏封装的开源库。通过添加一个与statusBar等高的View,用来设置状态栏颜色。

效果如下:

1、保证4.4和5.5的效果一致,可随意设置状态栏颜色

比如


2、对于图片背景,状态栏透明显示



完整代码参见  https://github.com/zhangquanit/UI_Trainings     SystemBarTint

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值