在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>
点击下载下载