事件背景:项目中需要引入侧滑返回的功能,功能已经实现,出现的问题是,侧滑的时候,出现的背景是黑色,等滑动完之后才会消失。
解决方案:将activity的theme设置成背景透明,即可在滑动过程中看到底层的activity,而不是看到黑色背景
bug场景:themes.xml中新建style,设置了属性:
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
并给activity应用了这个style作为theme,在滑动的时候,依然是黑色背景而不是透明背景
解决步骤:
1.检查是否theme设置问题,是否有属性覆盖,是否有子类重写,合并到编译后的values中是否正确--设置正确,属性正常
2.检查代码中是否动态设置theme--不存在动态设置
3.控制变量法,将theme的背景色改成红色,并将两个activity的布局背景色去掉,期望结果:红色背景--实际是黑色背景
4.注意到闪屏界面先变成红色,再变成背景图片,然后再跳转主页面。将闪屏界面的背景图片去掉,背景色也去掉,启动app,期望结果:背景红变黑再跳转主页面--与期望结果相同
5.由4说明theme设置是正常的(冷启动先加载默认主题-红色,在setcontentview后加载layout),说明是有设置过背景颜色,覆盖了theme的颜色
6.普通activity继承了baseactivity。在baseacitity中按照生命周期查看调用方法,发现了设置沉浸式状态栏的方法。进入该方法,发现其根据android版本做了不同的操作,在6.0以上的版本中,不仅设置了状态栏颜色,而且设置了背景色。注释掉这句,再次运行程序,theme设置生效,滑动过程中背景透明。bug解决
总结:
1.要树立信心,总是以为自己哪里设置错了,甚至到其他app上验证了自己的设置方法没问题,还是依然怀疑哪里设置没有生效,在1中消耗了大量时间
2.要夯实基础,闪屏界面之前没有留意到,还是因为不能确定闪过的界面就是第一个启动的splashactivity。这里的知识点:冷启动
3.要心细,确认问题方向后仔细排查,按执行顺序依次查找疑似代码