Theme主题的使用及windowIsTranslucent的理解

为了解决app启动慢,黑白屏问题,所以开发中会用到自定义主题及 windowBackground 启动图

Theme主题的使用及windowIsTranslucent的理解_第1张图片

parent必须要添加,以及windowIsTranslucent要为false背景图才会显示,如果设为true,那么启动时app会等待activity 创建完成才会打开,影响体验

其次在application中,一般设置theme主题为系统Theme.AppCompat.NoActionBar之类主题

在android 8.0以上,如果首页跳转过快将会出现一些问题。

我的项目是,打开app后如果已经是登录过状态,立刻跳转到首页面。由于主页面(我的第二个要打开的activity)加载frament过慢,造成了第一个activity一闪而过,而windowbackground不结束的画面。

于是我开始在theme主题中找解决方案。

将application和activity的主题都设置为自定义主题,结果还是一闪而过的画面。

于是将两个theme主题中的windowIsTranslucent都设置为true,那么app启动时,将会是一个等待状态。

将application中的windowIsTranslucent设置为false,activity中的windowIsTranslucent设置为true,依然是一个等待打开状态。

将activity中的windowIsTranslucent设置为false,application中的windowIsTranslucent设置为true,第一个avtivity不再一闪而过,将等待第二个activity创建完成,再做跳转。

windowIsTranslucent属性,是将activity设置半透明的样式。如果设置为false,将显示theme主题的背景颜色。而第一个activity的windowbackgroud属性本应该是在activity启动以后结束,那为什么第一个activity已经开始要跳转,windowbackgroud还没有结束绘制,直到跳转到第二个activity才结束。又为什么application twindowIsTranslucent为true后,第一个activity出现时,第一个activity的windowbackgroud就结束了。

由于找不到相关答案,只能暂时理解为:当application设置windowIsTranslucent为false时,第一个activity跳转到第二个activity时,第二个activity不是透明状态,activity未完全创建完成,则用当前activity的windowbackground做当前页面,但跳转的动作已经完成,就是造成一闪而过的画面。当application设置windowIsTranslucent为true时,要跳转到的第二个activity为透明状态,所以当第二个activity未完全创建时,画面停留在当前界面,也就是第一个activity。待完成创建时跳转。

第一个activity常在各大app中作广告页使用。

当设置application的theme设置windowIsTranslucent为true时,看似一切正常了许多。但是在android8.0及以下版本,需要注意:

1.当Activity固定了方向。
2.“windowIsTranslucent”为true;
“windowSwipeToDismiss”为true;
“windowIsFloating“为true;
3.targetSdkVersion >26

如上三种情况将会造成Only fullscreen activities can request orientation"异常。最简单的办法把targetSdkVersion改成26或更低。

以上是为了解决app黑白屏以及android 8.0以上首页跳转过快出现的问题。

第二种解决方案:

事实上只要在跳转动作上做延迟操作,就不会造成第一个activity一闪而过的画面,还可以控制广告页时间,由于萌新不懂大佬的代码逻辑,走错方向,又执着于windowIsTranslucent属性,浪费了时间。可以用线程的sleep,handler,或者java定时器进行操作。

 

 

你可能感兴趣的:(android)