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

发表评论

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