解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题

摘要:
继续进行修改,设置透明属性为true,代码如下:true经过这次的修改之后黑色闪屏现象消失了,最终达到了自己理想的效果。--为Theme设置透明属性--˃true上面的2种Theme中,为Theme设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;为Theme设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。但是问题有出现了,原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true之后切换动画失效了。

项目中遇到打开Activity后黑屏的问题,网上找到解决办法是通过设置theme和style属性可以实现

之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页。直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为application的主题样式android:theme="@style/AppTheme"使用了Theme.Light题导致的,Light 样式的 windowBackground、colorBackground、colorForeground 等属性的值均为 light 也就是白色偏亮,所以才会出现白色闪屏。下面是我的 APP 出现白色闪屏时样式引用的代码:

   <style name="AppTheme" parent="android:Theme.Light">
</style>

简单的修改后,闪屏颜色为黑色,代码如下:

   <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">

   </style>

代码修改后引用的样式为黑色主题,但欢迎页仍然会有黑色闪屏短暂的停留。继续进行修改,设置透明属性为 true,代码如下:

    <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:windowIsTranslucent">true</item>
    </style>

经过这次的修改之后黑色闪屏现象消失了,最终达到了自己理想的效果。最后,经过查阅资料发现已经有人总结和处理过这类问题了,并且给出了优缺点的分析,我在这里以我的理解对其进行引用。

原来避免黑色闪屏有2种方法,分别为:1.为Theme设置背景图;2.为Theme设置透明属性。显然我采用的是第二种方式,先分别看看这2种方式所引用的代码:

    <!-- 为 Theme 设置背景图 -->
    <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:windowBackground">@drawable/splash_bg</item>
    </style>
    <!-- 为 Theme 设置透明属性 -->
    <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:windowIsTranslucent">true</item>
    </style>

上面的2种 Theme 中,为Theme设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;为Theme设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。下面是两种方式的优缺点:

  • 为Theme设置背景图 给人程序启动快的感觉,界面先显示背景图,然后再刷新其他界面控件,刷新不同步。
  • 为Theme设置透明属性 给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。

但是问题有出现了,原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true之后切换动画失效了。暂时我也不知道android系统的theme属性之间关系的错综复杂,继承来继承去的。。。为什么会出现这种问题,不过还好无意间找到了解决办法


  1. <stylename="AppTheme"parent="AppBaseTheme">
  2. <!--<itemname="android:windowAnimationStyle">@style/Animation.Activity.Style</item>-->
  3. <itemname="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
  4. <itemname="android:windowBackground">@android:color/transparent</item>
  5. <itemname="android:windowIsTranslucent">true</item>
  6. </style>
  7. <stylename="Animation.Activity.Style"parent="@android:style/Animation.Activity">
  8. <itemname="android:activityOpenEnterAnimation">@anim/base_slide_right_in</item>
  9. <itemname="android:activityOpenExitAnimation">@anim/base_stay_orig</item>
  10. <itemname="android:activityCloseEnterAnimation">@anim/base_stay_orig</item>
  11. <itemname="android:activityCloseExitAnimation">@anim/base_slide_right_out</item>
  12. <itemname="android:taskOpenEnterAnimation">@anim/base_slide_right_in</item>
  13. <itemname="android:taskOpenExitAnimation">@anim/base_stay_orig</item>
  14. <itemname="android:taskCloseEnterAnimation">@anim/base_stay_orig</item>
  15. <itemname="android:taskCloseExitAnimation">@anim/base_slide_right_out</item>
  16. <itemname="android:taskToFrontEnterAnimation">@anim/base_slide_right_in</item>
  17. <itemname="android:taskToFrontExitAnimation">@anim/base_stay_orig</item>
  18. <itemname="android:taskToBackEnterAnimation">@anim/base_stay_orig</item>
  19. <itemname="android:taskToBackExitAnimation">@anim/base_slide_right_out</item>
  20. </style>
  21. <stylename="Animation.Activity.Translucent.Style"parent="@android:style/Animation.Translucent">
  22. <itemname="android:windowEnterAnimation">@anim/base_slide_right_in</item>
  23. <itemname="android:windowExitAnimation">@anim/base_slide_right_out</item>
  24. </style>

配置style继承的parent为


  1. <stylename="Animation.Activity.Translucent.Style"parent="@android:style/Animation.Translucent">
  2. <itemname="android:windowEnterAnimation">@anim/base_slide_right_in</item>
  3. <itemname="android:windowExitAnimation">@anim/base_slide_right_out</item>
  4. </style>

然后让apptheme的


  1. android:windowAnimationStyle为上面的style
  1. <stylename="AppTheme"parent="AppBaseTheme">
  2. <itemname="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
  3. <itemname="android:windowBackground">@android:color/transparent</item>
  4. <itemname="android:windowIsTranslucent">true</item>
  5. </style>

如果想在所有的activity切换时候使用该theme,可以配置application,也可以单个单个配置在activity里面。

当然首页退出的时候可以单独配置MainActivity的退出动画和进入动画

  1. <stylename="Animation.Activity.Translucent.Style.Main"parent="@android:style/Animation.Translucent">
  2. <itemname="android:windowExitAnimation">@anim/slide_right_out</item>
  3. </style>

MainActivity的退出和进入动画可以引用系统提供的,但是好像在style里面配置引用不了有些系统的anim,

在文件夹sdkplatformsandroid-20data es下面,activity_open_enter.xml,activity_close_exit.xml可以直接拷贝到项目中,修改

单独写一个进入或者退出,然后其它默认。。。。。。。

免责声明:文章转载自《解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MIUI 10以上版本通用线刷ROOT方法IE 浏览器各个版本 JavaScript 支持情况一览表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android学习之七:使用Container

3.TableLayout:Android 的TableLayout的布局就像Html的表格一样,可以根据我们的说明来安排widgets的位置。我们可以自己控制屏幕的行数和列数,而每列可以根据包含的内容进行伸缩。 通常情况下,TableLayout有多个TableRow组成,每个TableRow就是一行,定义几个TableRow就是定义几行。TableL...

Android Studio项目导入aar包报错

最近在试着接入TrPay的sdk,根据它家文档需要导入它们的aar包(paysdk-release-1.2.2.aar)。 在AS中怎么给安卓项目导入aar包,网上搜一下就能看到无非也就下面三步: 1、把aar放到module里的libs目录下。新建安卓项目时,默认的模块名字是app,即放到app/libs/下。 2、在app的build.gradle中加...

让x86的android模拟器能模拟arm架构系统

2019年展月6日更新: 1、最近发现了一个能在linux下模拟arm的模拟器: xdroid,网址: https://www.linzhuotech.com/index.php/home/index/down.html, 特别好用。直接模拟arm。我的云盘里有其可执行程序。 (这个需要 5G 的根目录空间,不推荐,太大了,这个是linux上运行,不是模拟...

less的基本用法

Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数. Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行 (借助 Node.js)。 使用方式 两种使用方式:第一种全局安装less,利用命令编译less;第二种直接引入less.js. npm安装 npm instal...

Ubuntu上交叉编译valgrind for Android 4.0.4的过程与注意事项

编译环境:Ubuntu x86_64(Linux root 2.6.32-45-generic #101-Ubuntu SMP Mon Dec 3 15:39:38 UTC 2012 x86_64 GNU/Linux) 运行环境:Android 4.0.4 (Linux kernel 3.0.21 OMAP4460) 一、下载NDK9和valgrind...

Android开发人员不得不收集的代码(不断更新中...)

尺寸相关 dp与px转换 sp与px转换 各种单位转换 在onCreate()即可获取View的宽高 ListView中提前测量View尺寸 手机相关 判断设备是否是手机 获取当前设备的IMIE,需与上面的isPhone一起使用 获取手机状态信息 是否有SD卡 获取MAC地址 获取手机厂商,如Xiaomi 获取手机型号...