Android 4.4 实现透明状态栏Translucent system bar(Status bar)

原文链接 :点击打开链接

Android 5.0的Material Design酷炫、吊炸天,先来解决黑黑的手机状态栏,再一步一步实现Material Design。
ThemeColors
对于Android 5.0 Status bar和App bar的背景色可以轻松定义,对于Android 4.4如何实现呢?
来两张效果图,那张更清晰、好看?
android_screenshot_default_system_bar_mark《—–》android_screenshot_translucent

Status bar

On Android, the status bar contains notification icons and system icons.
Android status bar height: 24dp

ps:Android navigation bar 会引发一些问题,暂时不写了。

预备基础知识(Translucent system bars)
android:fitsSystemWindows

布局时是否考虑给系统窗口留出空间,true为留出空间(如 Status Bar and App bar)

android:clipToPadding

是否允许ViewGroup在padding中绘制,该值默认为true,即允许,padding无效;false:padding生效.

透明系统栏设置(Status bar 和 Navigation bar)
1
2
Theme.Holo.NoActionBar.TranslucentDecor
Theme.Holo.Light.NoActionBar.TranslucentDecor

如果设置了透明系统栏就必须设置fitsSystemWindows:true和android:clipToPadding:false(适用于listview等)留出系统栏空间而不会被遮挡.
也可以在自定义主题中,增加windowTranslucentNavigation和windowTranslucentStatus属性。

Activity,Window和View之间的关系
1
2
3
//了解 下面方法是获取 rootView
Window win = activity.getWindow();
ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();

DecorView

SystemBarTint 项目

Apply background tinting to the Android system UI when using KitKat translucent modes.

1
2
3
//只对4.4做修改~修改代码:Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT){
}
设置4.4的Status bar颜色
第一步:定义主题Theme

values/
values-v19/
values-v21/

1
2
3
4
5
< style name = "AppNavigationDrawerTheme" parent = "@android:style/Theme.Holo.Light" >
         <!--Translucent system bars-->
         < item name = "android:windowTranslucentNavigation" >true</ item >
         < item name = "android:windowTranslucentStatus" >false</ item >
     </ style >
第二步:设置布局属性

//同样只对values-v19/设置

1
2
android:fitsSystemWindows="@bool/fitsSystemWindows"
android:clipToPadding="false"
第三步:设置颜色值

//同样只对Api19生效
//Activity

1
2
3
4
5
6
7
8
9
     @TargetApi ( 19 )
     public static void setTranslucentStatus(Activity activity, boolean on) {
     if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
         SystemBarTintManager tintManager = new SystemBarTintManager(activity);
         tintManager.setStatusBarTintEnabled( true );
         tintManager.setNavigationBarTintEnabled( false );
         tintManager.setStatusBarTintColor(activity.getResources().getColor(R.color.colorPrimary));
     }
}

//ActionBarActivity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     @TargetApi ( 19 )
     public void setTranslucentStatus(Activity activity, boolean on) {
     if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
         Window win = activity.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);
 
         SystemBarTintManager tintManager = new SystemBarTintManager(activity);
         tintManager.setStatusBarTintEnabled( true );
         tintManager.setNavigationBarTintEnabled( true );
         tintManager.setStatusBarTintColor(activity.getResources().getColor(R.color.colorPrimary));
         tintManager.setNavigationBarTintColor(activity.getResources().getColor(R.color.colorPrimary));
         tintManager.setStatusBarTintResource(R.color.colorPrimary);
     }
}

搞定收工

GitHub地址:https://github.com/captain-miao/AndroidStartupDemo
apk下载地址:http://fir.im/yan

遇到的问题

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值