Android透明状态栏(4.4以上版本)
来源:互联网 发布:陈赫品牌淘宝店 编辑:程序博客网 时间:2024/05/16 13:40
关键代码:
protected void initSystemBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); window.setNavigationBarColor(Color.TRANSPARENT); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); // Translucent status bar window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // Translucent navigation bar window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } }
问题:
1.状态栏透明之后,布局会统一上移,所以需要在第一个布局上面加paddingTop,一般导航栏写成一个控件TopBar,然后每个页面去引用, 可以建values-v19 和values-21文件夹,在dimens.xml里面去配置TopBar的高度和paddingTop
2.透明状态栏会与底部输入框有冲突,导致adjustResize不起作用,输入框不能被软键盘弹起来,解决方法是重写activity的根布局,然后在根布局上设置fitSystemWindows=”true”,这个忘了设置是不行的
/** * Created by star on 2017/1/20 * 功能: 解决透明状态栏和底部输入框的冲突问题,将activity的根布局替换成该类,需要什么布局就继承哪个ViewGroup,比如需要RelativeLayout就extends RelativeLayout */public class CustomInsetsLinearLayout extends LinearLayout { private int[] mInsets = new int[4]; public CustomInsetsLinearLayout(Context context) { super(context); } public CustomInsetsLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CustomInsetsLinearLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public final int[] getInsets() { return mInsets; } @Override protected final boolean fitSystemWindows(Rect insets) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // Intentionally do not modify the bottom inset. For some reason, // if the bottom inset is modified, window resizing stops working. mInsets[0] = insets.left; mInsets[1] = insets.top; mInsets[2] = insets.right; insets.left = 0; insets.top = 0; insets.right = 0; } return super.fitSystemWindows(insets); } @Override public final WindowInsets onApplyWindowInsets(WindowInsets insets) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { mInsets[0] = insets.getSystemWindowInsetLeft(); mInsets[1] = insets.getSystemWindowInsetTop(); mInsets[2] = insets.getSystemWindowInsetRight(); return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0, insets.getSystemWindowInsetBottom())); } else { return insets; } }}
- fitSystemWindows=”true”意思是布局是否从状态栏下面开始排列
- clipToPadding默认为true,如果最上面布局有paddingTop,例如ListView,则表示滑动的时候paddingTop能否被滑走,true为不滑走,false为滑走
0 0
- Android透明状态栏(4.4以上版本)
- Android 4.4及以上版本透明状态栏
- Android 4.4及以上版本实现状态栏透明
- android 4.4版本以上透明状态栏的简单实现
- Android实战之 4.4版本及以上透明状态栏,兼容5.0及以上
- Android实现4.4以上系统状态栏透明
- Android 4.4 以及 5.0以上 透明状态栏
- 4.4以上状态栏透明方法
- 对系统版本为4.4及以上的开启 透明状态栏和导航栏(即沉浸式状态栏)
- Android 5.0以上实现透明状态栏
- Android 4.4 以上分分钟实现状态栏伪沉浸(状态栏透明)
- Android之4.4版本以上沉浸式状态栏实现
- Android 透明(沉浸)状态栏 各个版本的完全解决方案
- 【Android】4.4以上使用透明状态栏后布局被软键盘遮挡的解决办法
- Android 4.4 以上实现透明导航栏和状态栏 Translucent system bar
- android4.4以上透明状态栏
- Android沉浸式状态栏5.0版本及透明状态栏兼容4.4
- Android沉浸式状态栏(透明状态栏)
- shared_ptr的理解和注意事项
- Spring get start
- 1.gdb调试初级
- 让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句
- Android应用优化方案四
- Android透明状态栏(4.4以上版本)
- linux下Matcaffe调用及库链接问题的解决(mattest不通过)
- select2 tag之远程源搜索
- 用函数求int 、double 等的范围和所占字节数
- 保护模式--页式存储
- MySQL存储引擎
- 如何快速发现和处理sqlserver数据库的死锁
- ArcGIS for JavaScript获取token
- 第一篇博客,写给自己一年的回顾