眼前多少难甘事,自古男儿当自强。这篇文章主要讲述Android 状态栏那些小坑?相关的知识,希望能为你提供帮助。
背景:因为之前老板上次问我我们的app能不能自定义上面的状态栏我说可以啊!
当时没管,
今天试了下果然很多坑,
之前github上也有很多大佬写了一个开源库有兴趣的可以点进去看下支持DrawLayout沉侵式[StatusBarUtil](https://github.com/laobie/StatusBarUtil)感觉好牛逼,
像大佬敬礼,
我毕竟是个小喽喽,
我只能用最蠢的办法!
首先说下关于状态栏当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏实现代码 其实状态栏这东西不是很难, 就是通过添加一个跟转态栏一样的View, 但是你要计算状态栏的高度不然就会出现重影或者顶上去了, 哈哈! 下面看看我之前怎么顶上去的, 很厉害的哟!
* 动态的设置状态栏实现沉浸式状态栏
*
*/
private void initState() {//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏
if (Build.VERSION.SDK_INT >
=
Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//
LinearLayout linear_bar =
(LinearLayout) findViewById(R.id.ll_bar);
linear_bar.setVisibility(View.VISIBLE);
//获取到状态栏的高度
int statusHeight =
getStatusBarHeight();
//动态的设置隐藏布局的高度
LinearLayout.LayoutParams params =
(LinearLayout.LayoutParams) linear_bar.getLayoutParams();
params.height =
statusHeight;
linear_bar.setLayoutParams(params);
}
}/**
* 通过反射的方式获取状态栏高度
*
* @
return
*/
private int getStatusBarHeight() {
try {
Class<
?>
c =
Class.forName("
com.android.internal.R$dimen"
);
Object obj =
c.newInstance();
Field field =
c.getField("
status_bar_height"
);
int x =
Integer.parseInt(field.get(obj).toString());
return getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
}
我这里直接封装到我的BaseActivity因为每个Activity` 这里写代码片` 都要用到, 代码都不难, 想想我们那么多前辈把自己辛苦写的东西全部贡献给github这个大家庭, 所以你家里的东西随便拿来用就行了, 所以妈妈再也不用担心您不会撸码了, 撸着袖子就是干, 年轻人不要怂! 我这里这是拿着别人的代码, 但是用了别人至少给个star不要那么小气, 人家写代码也很辛苦的对不对! 废话不多说! 看我顶顶顶!
文章图片
看到没有状态栏的高度, 到这里你千万别忘了我们还有TitleBar那些, 现在该怎么办?
小伙伴们? 怎么解决, 一般老司机会这样想:”能不能给个View把他顶上去”, 答案是肯定可以的的啦!
但是对于我这种菜鸟我想不到, 想不到怎么办? 问题总要解决, 生活还得继续, 于是乎想了一下, 我还是不知道?
文章图片
好坏好坏的, 硬是不给我出来! 好坏好坏的!
努力思考中………..
文章图片
咚咚咚 咚咚咚
好吧 好像忘记了什么? 我记得好像有个fixSystemWindow设置为true不就行了吗哈哈, 试试
但是有点问题, 有些可以, 有些不可以, 再看看,
文章图片
文章图片
最后添加个样式
<
style name=
"
NoStatusStyle"
parent=
"
AppTheme"
>
<
item name=
"
android:windowTranslucentStatus"
>
true<
/item>
<
!--状态栏为透明,如果设置为false,
则没有黑色条盖住,
见下图对比-->
<
item name=
"
android:windowTranslucentNavigation"
>
true<
/item>
<
!--导航栏为透明-->
<
item name=
"
android:statusBarColor"
>
@
android:color/holo_green_light<
/item>
<
/style>
然后在每一个Activity中添加这样的属性除了那些全屏的Activity这里大家都懂哈!
android:fitsSystemWindows=
"
true"
style=
"
@
style/NoStatusStyle"
完美解决! 让我亲吻下大地!
推荐文章: 1. Android 沉浸式状态栏的三种实现方式
2.Android 沉浸状态栏
写到最后: kotlin>
好的文章要学会分享, 话说今天是GoogleIO大会, 以后我们可能慢慢的跟科特林大哥学习了, 暂时跟java老哥, 挥泪告别, 这个肯定有一段的距离肯定要等到As完美兼容到这里踩坑基本结束, 我知道大家还有其他很多方法。大家可以在下面留言, 我会虚心接受, 转载请注明出处! 每天跟代码在一块忍受着孤独与寂寞, 但是英雄注定孤独的嘛! 我现在是菜鸟, 总有一天我也会成为老司机的吗? 哈哈玩笑,不管是科特林还是Java编程永远无止境!
结束语:
听说会点赞的人运气不会太差不信你试试!
【Android 状态栏那些小坑()】
推荐阅读
- android POI搜索,附近搜索,周边搜索定位介绍
- AppletScriptlet与Servlet
- HDU 5303 Delicious Apples (贪心 枚举 好题)
- Ubuntu使用adb连接android手机失败unknown的解决的方法
- Delphi 10.1.2 berlin开发跨平台APP的几点经验
- Android 流媒体播放 live streaming
- Android的方法和属性
- Appium 连手机失败Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND localhost undefine
- 怎样使用在线Webapp生成器生成安装包