关于如何实现android状态栏沉淀式效果
16lz
2021-01-26
第一步:
首先得让你的activity的布局文件的根布局有android:fitsSystemWindows="true"
该属性,它指定了状态栏占有一定的位子.
第二步:
在你的activity的onCreate
方法中调用该方法:
@TargetApi(19)private void initWindow() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); ViewGroup decorView = (ViewGroup) getWindow().getDecorView(); View mStatusBarTintView = new View(this); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, getStatusBarHeight()); params.gravity = Gravity.TOP; mStatusBarTintView.setLayoutParams(params); mStatusBarTintView.setBackgroundColor(getResources().getColor(DEFAULT_TINT_COLOR)); mStatusBarTintView.setVisibility(View.VISIBLE); decorView.addView(mStatusBarTintView); }}
protected int getStatusBarHeight(){ Class<?> c = null; Object obj = null; Field field = null; int x = 0, sbar = 38;//默认为38,貌似大部分是这样的 try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field.get(obj).toString()); sbar = getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return sbar;}
这里获取状态栏的获取就不说了,上一篇文章已经说过了关于如何获取android状态栏高度,上面的DEFAULT_TINT_COLOR
就是你要指定的状态栏颜色值,我这里设置的颜色值跟toolbar的颜色一样。
更多相关文章
- android沉浸式状态栏的适配(包含刘海屏)
- Android(安卓)疯狂造轮子 常用工具类 直接拿来用!
- 【Android(安卓)初学】6、线性布局--深入LinearLayout
- 使用字符串获取与该字符串同名的变量值
- Android高性能的布局
- Android判断服务是否运行及定位问题实例分析
- 一个android颜色识别器
- Qt 打开安卓相册选择图片并获取图片的本地路径
- android 获取字符串的高度和宽度