android状态栏一体化(沉浸式状态栏)

Android 在液体中浸泡式状态栏、状态栏使一致、清晰度状态栏、仿ios清晰度状态栏 

注:状态栏的字形色位洁白, 结果状态栏语境为洁白,以上所述视频博客早已处置。

原文出处: 

不久以前通知一张设计图真是太好了。,因而仔细考虑了一下清晰度状态栏,坚持到底变动从而产生断层在液体中浸泡式状态栏,在引见人了因特网上的相当通讯接近末期的,视频博客花色品种了。

Github Demo 关联: StatusBarCompat

引见人文字:

  1. 由在液体中浸泡式状态栏扳柄的谋杀

  2. Translucent System Bar 的最适宜的惯常地进行

  3. 该应用 fitsSystemWindows 了!


第一位,图下说明文字,在附近的状态栏的处置有两种不相通的办法, 在这一点上是半清晰度的 System Bar 最好的做法是正好打劫两张相片。

先清晰度几个的成语

  1. 全屏幕调式: 左面的图片显示出狱了。

  2. 上色调式: 马上的图片显示出狱了。

  3. ContentView: () 获取的 View , 即,设置SETCONTIFVIEW办法。 View, 实质是边框结构。

  4. ContentParent: ContentView 的 parent , 实则质是直线的规划。

  5. 孥观的第一位个孩子:质地观 View ,更确切地说,在规划提出中 layout .

当时的引见了互相牵连职务

  1. fitsSystemWindows, 可以将此属性设置为零碎。 View 预留出投宿, 当设置为 true 时,会预留出状态栏的投宿.

  2. ContentView, 实质是质地边框, 然而重写Debug, 故此设置FITS StaseWindows失效的。

  3. ContentParent, 实质是FitWindowsLinearLayout, 外面第一位个 View 是 ViewStubCompat, 结果根本图案未设置 title ,它将不会 inflate .瞬间个 View 这执意质地观。

前述的处置

自引入 Material Design ,状态栏对开发者应用程式各种的正好,可以正好必要 setStatusBarColor 来设置状态栏的色.

全屏幕调式:

  1. 窗口窗口
  2.   
  3. ();   
  4.   
  5.   
  6. ();   
  7.   
  8. (statusColor);  
  9.   
  10. ViewGroup mContentView = (ViewGroup) ();  
  11. 检查McCurnVIEW =(0)
  12. if (mChildView != null) {  
  13.       
  14.     (mChildView, false);  
  15. }  

上色调式:

  1. 窗口窗口
  2.   
  3. ();   
  4.   
  5.   
  6. ();   
  7.   
  8. (statusColor);  
  9.   
  10. ViewGroup mContentView = (ViewGroup) ();  
  11. 检查McCurnVIEW =(0)
  12. if (mChildView != null) {  
  13.       
  14.     (mChildView, true);  
  15. }  

-的处置:

由于心不在焉正好 API 可以称为,必要与本身亲和的,网上的处置办法根本都是到达一下高等为状态栏的 View ,经过设置 View 的语境色来仿照状态栏. 在在这一点上我早已尝试了三种办法来处置它。

办法1: 在质地看中添加false View , 设置ChildView marginTop 属性仿照 fitsSystemWindows .

全屏幕调式:

  1. 窗口窗口
  2. ViewGroup mContentView = (ViewGroup) ();  
  3.   
  4.   
  5. 检查McCurnVIEW =(0)
  6. if (mChildView != null) {  
  7.     (mChildView, false);  
  8. }  
  9.   
  10. int statusBarHeight = getStatusBarHeight(activity);  
  11.   
  12. ();  
  13.   
  14. if (mChildView != null && () != null && ().height == statusBarHeight) {  
  15.       
  16.     (mChildView);  
  17.     mChildView = (0);  
  18. }  
  19. if (mChildView != null) {  
  20.      lp = () ();  
  21.       
  22.     if(LP)!= null &&  >= statusBarHeight) {  
  23.          -= statusBarHeight;  
  24. (LP)
  25.     }  
  26. }  

上色调式:

  1. 窗口窗口
  2. ViewGroup mContentView = (ViewGroup) ();  
  3.   
  4.   
  5. ();  
  6. int statusBarHeight = getStatusBarHeight(activity);  
  7.   
  8. 检查McCurnVIEW =(0)
  9. if (mChildView != null) {  
  10.      lp = () ();  
  11.       
  12.     if(LP)!= null &&  < statusBarHeight &&  != statusBarHeight) {  
  13.           
  14.         (mChildView, false);   
  15.          += statusBarHeight;  
  16. (LP)
  17.     }  
  18. }  
  19.   
  20. 检查StasBuVIEW =(0)
  21. if (statusBarView != null && () != null && ().height == statusBarHeight) {  
  22.       
  23.     (statusColor);  
  24.     return;  
  25. }  
  26. statusBarView = new看(竞选运动)
  27.  lp = new (.MATCH_PARENT, statusBarHeight);  
  28. (statusColor);  
  29.   
  30. (statusBarView, 0,LP)

办法2: 向质地父添加里面的 View ,设置CaltVIEW和ChildView fitsSystemWindows.

全屏幕调式:

  1. 窗口窗口
  2. ();  
  3.   
  4. ViewGroup mContentView = (ViewGroup) ();  
  5. ViewGroup mContentParent = (ViewGroup) ();  
  6.   
  7. 检查StasBuVIEW =(0)
  8. if (statusBarView != null && () != null && ().height == getStatusBarHeight(activity)) {  
  9.       
  10.     (statusBarView);  
  11. }  
  12.   
  13. if ((0) != null) {  
  14.     ((0), false);  
  15. }  
  16.   
  17.   
  18. 检查McCurnVIEW =(0)
  19. if (mChildView != null) {  
  20.     (mChildView, false);  
  21. }  

上色调式(会有黑线),无法处置它)

  1. 窗口窗口
  2. ();  
  3.   
  4. ViewGroup mContentView = (ViewGroup) ();  
  5. ViewGroup mContentParent = (ViewGroup) ();  
  6.   
  7. 检查StasBuVIEW =(0)
  8. if (statusBarView != null && () != null && ().height == getStatusBarHeight(activity)) {  
  9.       
  10.     (statusColor);  
  11.     return;  
  12. }  
  13.   
  14.   
  15. statusBarView = new看(竞选运动)
  16.  lp = new (.MATCH_PARENT,  
  17.         getStatusBarHeight(activity));  
  18. (statusColor);  
  19. (statusBarView, 0,LP)
  20.   
  21.   
  22. 检查McCurnVIEW =(0)
  23. if (mChildView != null) {  
  24.     (mChildView, false);  
  25. }  

办法3:在质地看中添加false View , 设置ChildView fitsSystemWindows.

全屏幕调式:

  1. 窗口窗口
  2. ();  
  3.   
  4. ViewGroup mContentView = (ViewGroup) ();  
  5. 检查StasBuVIEW =(0)
  6.   
  7. if (statusBarView != null && () != null && ().height == getStatusBarHeight(activity)) {  
  8.     (statusBarView);  
  9. }  
  10.   
  11. if ((0) != null) {  
  12.     ((0), false);  
  13. }  

上色调式:

  1. 窗口窗口
  2. ();  
  3.   
  4. ViewGroup mContentView = (ViewGroup) ();  
  5. int statusBarHeight = getStatusBarHeight(activity);  
  6.   
  7. 检查MopVIEW =(0)
  8. if (mTopView != null && () != null && ().height == statusBarHeight) {  
  9.       
  10.     (statusColor);  
  11.     return;  
  12. }  
  13.   
  14. if (mTopView != null) {  
  15.     (mTopView, true);  
  16. }  
  17.   
  18.   
  19. mTopView = new看(竞选运动)
  20.  lp = new (.MATCH_PARENT, statusBarHeight);  
  21. (statusColor);  
  22. (mTopView, 0,LP)

实则全屏幕幕调式在持有违禁物三种调式中都是相通的。,首要是上色调式变卖是不相通的。

对比地三种东西上色调式变卖办法

  办法1 办法2 办法3
规律 在质地看中添加false View, 当时的应用孥观 marginTop 属性仿照 fitsSystemWindows ,首要经过修正 marginTop 可以在全屏幕幕调式和上色调式当中切换值。 由于PraveVIEW的实质是直线的规划, 可以添加到它的顶部 View . 在质地看中添加false View, 当时的使用ChildView 的 fitsSystemWindows 属性来把持使就职, 然而变卖缺陷执意不克不及天天切换两种调式.
缺陷 变更了孥观 marginTop 值 上色调式,会像由在液体中浸泡式状态栏扳柄的谋杀中类似于呈现一件商品黑线 无法重新开始 Activity 在鞭打调式的位置下。
对应 Github demo 定中心行为准则 StatusBarCompat类 StatusBarCompat1类 StatusBarCompat2 类

总结

  • STATUS BARCOMPAT2的首要成绩不克不及切换。

  • StasuBARCOMPAT1将在其上有黑线, 结果可以处置的话,据我的观点这是最可靠性的处置办法。

  • 类STATESBARCOMPAT是我作出的最近的一点钟处置方案。, 眼前应用影响良好。

    • 用户可以同时在一些时期 Activity 中切换不相通的状态栏调式.

    • 上运算符 View 重写了 dispatchFitSystemWindows 也将不会举足轻重.

马夫干品集中营安卓客户端,变卖了在液体中浸泡式状态栏,无漏洞的换肤,带3D觉得的侧滑菜肴

主枝和侧滑年史截图

福利与皮肤变更截图

下载地址:干货集中营
github:GanK

发表评论

电子邮件地址不会被公开。 必填项已用*标注