最近,在公司负责了app与社交模块的对接工作,用一个透明背景的Activity作为中间跳转Activity。在接完所有接口后,突然一个bug出现,说点击icon跳转蹦了!蹦了!附带一张日志
我试了一下,一脸懵逼,问他们怎么玩出来这个bug,拿了他们手机,确实必现这个bug,试了好几台手机,发现8.0以上的测试机有些必现这个bug。
从日志中,字面意思上是“只有全面屏的activity才能锁定屏幕方向”,逛遍Google和百度,发现问题的大概位置,原来是跟这个属性有关:
在一篇文章https://zhuanlan.zhihu.com/p/32190223中发现一些原因,我借鉴了一下,把它搬了过来:
- “windowIsTranslucent”为true;
- “windowIsTranslucent”为false,但“windowSwipeToDismiss”为true;
- “windowIsFloating“为true;
以上三种情况认为不是“fullscreen“
以上应该就是原因所在了,网上主流的解决方案是都将android:windowIsTranslucent设为false。不过,尝试了一下,确实可以正常跳转了,但是,跳转时Activity的背景不是为透明了,这样不能满足了设计需求。
我想了一下,日志说明了非fullscreen不能固定屏幕方向,那就我去掉固定屏幕方向的属性试试,发现确实不出意料,可以正常跳转,但是!但是!发现屏幕竟然还是固定的,因缺思厅,不过原因我没有找到\偷笑,不过,经过测试确定了是与“windowIsTranslucent”这个属性有关,当它为true时,屏幕是默认固定的。所以我的解决方案就找了,直接去掉这句即可完美解决问题
保留android:windowIsTranslucent为true,即可同时解决Activity背景透明同时可以固定屏幕方向和正常跳转的问题。
不过看网上的介绍这个好像是SDK8.0的系统bug来,之后的版本会进行修复,不过这个坑还是避免不了。
如果有大神发现了为什么android:windowIsTranslucent为true时屏幕会固定的原因,麻烦告诉我一声,我挺好奇的,或者我以后找到问题所在,也会来更新这篇博客。