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

Android Q(10)系统上的异常生命周期事件 Android10系统上因windowIsTranslucent引起的生命周期异常 阅读详情

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

http://www.cnblogs.com/sunzn/p/3407078.html

之前在做 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属性之间关系的错综复杂,继承来继承去的。。。为什么会出现这种问题,不过还好无意间找到了解决办法

<style name="AppTheme" parent="AppBaseTheme">

        <!-- <item name="android:windowAnimationStyle">@style/Animation.Activity.Style</item> -->
        <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

    <style name="Animation.Activity.Style" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/base_slide_right_in</item>
        <item name="android:activityOpenExitAnimation">@anim/base_stay_orig</item>
        <item name="android:activityCloseEnterAnimation">@anim/base_stay_orig</item>
        <item name="android:activityCloseExitAnimation">@anim/base_slide_right_out</item>
        <item name="android:taskOpenEnterAnimation">@anim/base_slide_right_in</item>
        <item name="android:taskOpenExitAnimation">@anim/base_stay_orig</item>
        <item name="android:taskCloseEnterAnimation">@anim/base_stay_orig</item>
        <item name="android:taskCloseExitAnimation">@anim/base_slide_right_out</item>
        <item name="android:taskToFrontEnterAnimation">@anim/base_slide_right_in</item>
        <item name="android:taskToFrontExitAnimation">@anim/base_stay_orig</item>
        <item name="android:taskToBackEnterAnimation">@anim/base_stay_orig</item>
        <item name="android:taskToBackExitAnimation">@anim/base_slide_right_out</item>
    </style>

    <style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">
        <item name="android:windowEnterAnimation">@anim/base_slide_right_in</item>
        <item name="android:windowExitAnimation">@anim/base_slide_right_out</item>
    </style>

配置style继承的parent为

<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">
        <item name="android:windowEnterAnimation">@anim/base_slide_right_in</item>
        <item name="android:windowExitAnimation">@anim/base_slide_right_out</item>
    </style>

然后让apptheme的
android:windowAnimationStyle为上面的style

<style name="AppTheme" parent="AppBaseTheme">

        <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

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

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

<style name="Animation.Activity.Translucent.Style.Main" parent="@android:style/Animation.Translucent">
        <item name="android:windowExitAnimation">@anim/slide_right_out</item>
    </style>


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

在文件夹sdk\platforms\android-20\data\res下面,activity_open_enter.xml,activity_close_exit.xml可以直接拷贝到项目中,修改

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

多动手,测试,如果有错误的地方麻烦留言一起交流,谢谢

Android 8.0系统透明主题适配解决办法 当Android当activity同时满足以下三个条件,会出现闪退当问题 1.Android系统8.0 2.透明主题 3.固定屏幕方向,screenOrientation的值为portrait 或者landscape(代码或者清单文件) 错误信息:java.lang.IllegalStateException: Only fullscreen activities can request orientation 解决到思路就是让三个条件不同时出现,目前有几种比较靠谱当解决办法,总结如... 阅读详情

相关推荐

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

m0_52031708的博客 3857

android windowistranslucent 转场动画,android:windowIsTranslucent=true情况下的Activity转场动画穿透问题...

问题描述最近使用SwipeBackLayout做滑动返回,添加true属性将window改为透明,发现这个设置影响到了Activity切换动画。A、B两个Activity,初始启动A Activity,再使用A启动B Activity,此时在B中调用方法将A Activity关闭,正常情况下window不为透明,UI表现上并不会感知到Activity被关闭,但是在设置windowIsTranslu...

weixin_26808205的博客 2026

centos7下安装gcc-10.3.0

生成多个系统版本的代码,如果你的操作系统是32位,默认就已经设置为 disable,这时gcc仅能生成32位的可执行程序;这里只开启了c,c++ 和fortran,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。启用posix标准的线程支持,这个设置取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。指定安装路径,这里没有指定,就直接放到文件夹里就好。

lxystar2003的博客 1189

android:windowbackground 透明,windowIsTranslucent和windowBackground对比

在Activity A切换到Activity B时,有时会遇到黑屏或者白屏的闪屏问题,经常我们会给Activity B设置一个透明主题来解决,即通过设置属性android:windowIsTranslucent=true或者android:windowBackground=@color/transparent。那么这两个属性有区别呢?下面从它们对Activity生命周期的影响来对比说明。andro...

weixin_33117093的博客 4798

SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员

笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。 对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3万+

AUTOSAR-SOMEIP配置总结

导入arxml之后someip信号一般以“pduSomeIp”开头或者“SomeIp”开头。以某个pdu为例,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。在导入arxml之后someip信号中有三个特殊的信号,形如“SdInstance”开头的信号,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。“EcuC”模块主要关注“EcucPduCollection”中的“Pdus”下面的配置。

xiandang8023的博客 4655

【android学习】使用windowIsTranslucent导致的问题

为啥使用windowIsTranslucent 一般我们使用在冷启动时候,视觉上加快了冷启动速度,一般设置如下: <item name="android:windowBackground">#ff0000</item> //背景颜色 <item name="android:windowIsTranslucent">true</item>//是否半透明 <!-- <item name="andro.

zkq49099的专栏 3806

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95

三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀

Coding... 2万+

android windowistranslucent alpha 动画,解決Activity啟動黑屏及設置android:windowIsTranslucent不兼容activity切換動畫問題...

原文:http://blog.youkuaiyun.com/fancylovejava/article/details/39643449之前項目中遇到打開Activity后黑屏的問題,網上找到解決辦法是通過設置theme和style屬性可以實現。http://www.cnblogs.com/sunzn/p/3407078.html之前在做 APP 的時候不太關注這個問題,因為自己在使用其他 APP 的時候也會...

weixin_42144554的博客 302

【BIM入门实战】Revit创建地形的几种方法及优缺点

Revit在体量和场地选项卡的【地形表面】工具可以创建三维地形,有三种方法:放置点、指定点文件和导入实例文件、倾斜摄影点云技术和InfraWorks地形生成。 文章目录1. 放置点2. 指定点文件3. 导入实例文件4. 倾斜摄影点云技术5. InfraWorks地形生成 1. 放置点 放置点功能位于体量和场地选项卡下地形表面,点开找到放置点,并通过自定义设置点的高程值来创建地形的高程数据。 优点:通过用户自定义高程点来绘制模型,使地形更为精确。 缺点:只适用于面积小的项目,面积太大,人工效率低下。 .

智慧空间实验室 4762

基于MATLAB开发AUTOSAR软件应用层模块-part3.自动生成的代码文件介绍

上篇文章我们介绍了如何设计一个简单的模型,之后自动生成autosar架构的代码,这篇文章我带大家看下,生成了哪些文件,以及这些文件的内容。 生成的文件见下图: model files是模型控制逻辑部分代码,包括 DEMO1.c DEMO1.h DEMO1_private.h DEMO1_types.h DEMO1.c 1 /* 2 * File: DEMO1.c 3 * 4 * Cod.

汽车软件开发 1978

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

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

w36680130的博客 200

【知识分享】IBIS 建模指南 03

本文介绍了差分缓冲器的数据提取方法,重点分析了差分系统与单端系统的核心差异。文章详细阐述了差分接收机和驱动器的结构特点、工作原理及建模方法,指出全差分结构具有优异的电源噪声抑制能力。针对IBIS建模规范,作者提出了三维I-V曲面数据提取技术,并介绍了共模/差模电流分离、片上端接处理以及V-T表生成的解决方案。文章还探讨了差分电容(C_diff)的测量方法和数据简化策略,为复杂差分缓冲器的精确建模提供了系统化的技术路径。

一只豌豆象的博客 1282
上一篇: Android listview动态添加删除更新带ProgressBar的Item
下一篇: 使用android SpannableStringBuilder实现图文混排,查看更多
fancylovejava
博客等级 码龄16年 1052粉丝 184原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值