android 状态栏一体化实现

在android4.4以后,增加了状态栏和应用一体化的功能。

效果:


具体的实现思路:

一.设置状态栏背景透明。

 1)代码设置(推荐)
  2)style主题中设置(这里设置,最小的sdk必须是19以上)

二.引入SystemBarTintManager类,即开源库SystemBarTint  地址:https://github.com/jgilfelt/SystemBarTint
  必须nineoldandroids.jar包

三.设置颜色


实现:

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setTranslucentStatus();
		setContentView(R.layout.activity_main);
	}
	
	/**
	 * 设置状态栏背景状态
	 */
	private void setTranslucentStatus() {
		setStatusBarTranslucent(true);
//		setNavigationBarTranslucent(true);
		SystemBarTintManager tintManager = new SystemBarTintManager(this);
		tintManager.setStatusBarTintEnabled(true);
		tintManager.setStatusBarTintResource(R.color.title_bar_bg);// 状态栏的背景颜色(0表示无背景)
//		tintManager.setNavigationBarTintEnabled(true);
//		tintManager.setNavigationBarTintResource(R.color.title_bar_bg);//导航栏背景颜色(0表示无背景)
	}

	/**
	 * 设置状态栏是否透明
	 * 
	 * @param isTransparent
	 */
	private void setStatusBarTranslucent(boolean isTransparent) {
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
				&& isTransparent) {
			Window win = getWindow();
			WindowManager.LayoutParams winParams = win.getAttributes();
			// 状态栏透明
			final int sBits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
			winParams.flags |= sBits;
			win.setAttributes(winParams);
		}
	}

	/**
	 * 设置导航栏是否透明
	 * 
	 * @param isTransparent
	 */
	private void setNavigationBarTranslucent(boolean isTransparent) {
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
				&& isTransparent) {
			Window win = getWindow();
			WindowManager.LayoutParams winParams = win.getAttributes();
			// 导航栏透明
			final int nBits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
			winParams.flags |= nBits;
			win.setAttributes(winParams);
		}
	}

值得注意的是:当我们设置了状态栏透明后,布局默认会顶到状态栏上。如下图所示:


可以在style中设置<item name="android:fitsSystemWindows">true</item>。

    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="android:windowNoTitle">true</item>
        <!--
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        -->
        <!--
                 要不要考虑系统窗口的布局。
    		 android:windowTranslucentStatus实现一体化的时候,
    		 布局会自定填充为整个手机界面的布局,所以,如果要恢复默认布局可以设置android:fitsSystemWindows为true。
        -->
        <item name="android:fitsSystemWindows">true</item>
    </style>

点击下载下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值