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

发表评论

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