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

android 状态栏一体化实现

2015-09-16 01:04 627 查看
在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>


点击下载下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: