沉浸式状态栏
来源:互联网 发布:c 数据结构与算法 编辑:程序博客网 时间:2024/06/06 01:56
最近项目要实现沉浸式状态栏,沉浸式状态栏只有4.4以上才能实现。4.4是渐变色 5.x以上是完全透明
4.4的显示效果
5.x以后的显示效果
在程序里面直接写上这一句就OK了,简单方便
首先这个fitview就是title的布局,得保证fitview已经被findViewById.
public static void setTranslucentBar(View view, Activity activity) { if (!isSdkSupport()) { return; } setTranslucentStatus(activity); setTranslucentTransparent(activity); fitStatusBar(view, activity); }
isSdkSupport()方法是判断Build 版本是否是在19以上
public static boolean isSdkSupport() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { return true; } return false; }
setTranslucentStatus(activity) 就是设置沉浸式
@TargetApi(19) private static void setTranslucentStatus(Activity activity) { Window window = activity.getWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; layoutParams.flags |= bits; window.setAttributes(layoutParams); }
到这里,就完成状态栏 但是 在5.x上面可以把状态栏设置成透明,也就是setTranslucentTransparent(activity)方法
private static void setTranslucentTransparent(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = activity.getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); } }
完成到这里的效果
title的布局都显示在状态栏了 这就不好了,那怎么解决这个方法呢?
我们直接给title布局的高度多加一个状态栏的高度不就可以了吗?
这也就是fitStatusBar(fitview,activity)的方法了。
private static void fitStatusBar(View fitView, Activity activity) { ViewGroup.LayoutParams layoutParams = fitView.getLayoutParams(); int paddingleft=fitView.getPaddingLeft(); int paddingright=fitView.getPaddingRight(); int paddingtop=fitView.getPaddingTop()+DeviceUtil.getStatusBarHeight(activity); int paddingbuttom=fitView.getPaddingBottom(); layoutParams.height+=DeviceUtil.getStatusBarHeight(activity); fitView.setPadding(paddingleft, paddingtop, paddingright, paddingbuttom); }
最后给出DeviceUtil.getStatusBarHeight方法
public static int getStatusBarHeight(Activity mActivity){ int resourceId = mActivity.getResources().getIdentifier("status_bar_height", "dimen", "android"); return mActivity.getResources().getDimensionPixelSize(resourceId); }
ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);ViewGroup parentView = (ViewGroup) contentFrameLayout.getChildAt(0);TranslucentBarUtil.setTranslucentBar(parentView.getChildAt(0),this);
Window.ID_ANDROID_CONTENT:The ID that the main layout in the XML layout file should have(XML中显示区域根视图的ID值,该视图由系统自动生成,未在XML中定义)
parentView 就是xml布局的根文件 这个就看自己的跟布局是什么自己对应就行了
阅读全文
1 0
- 状态栏、沉浸式状态栏
- 沉浸式状态栏/透明状态栏
- 透明状态栏(沉浸式状态栏)
- Android 沉浸式状态栏
- 沉浸式状态栏
- android 沉浸式 状态栏
- android 沉浸式状态栏
- android沉浸式状态栏
- 沉浸式状态栏
- Android沉浸式状态栏
- Android 沉浸式状态栏
- 沉浸式状态栏
- 沉浸式状态栏
- android 沉浸式状态栏
- Android沉浸式状态栏
- 设置沉浸式状态栏
- Android沉浸式状态栏
- 沉浸式状态栏
- elasticsearch与数据库同步工具Logstash-input-jdbc
- spring boot整合freemark
- 时间戳与时间之间的转换
- Android Studio系列之代码混淆proguardFiles
- 初识flume
- 沉浸式状态栏
- Android异常分析(转)
- 分布式开放消息系统(RocketMQ)的原理与实践
- break和continue的区别
- 学习收录
- Android ViewGroup点击效果(背景色)
- idea创建scala项目
- Unity的animaition不能播放问题
- 日期时间 FUNCTION