`

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

 
阅读更多
之前项目中遇到打开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>

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

分享到:
评论

相关推荐

    Android界面切换出现短暂黑屏的解决方法

    这种问题一般是因为一个Activity启动之后在显示视图之间时间太长导致的。 1、优化方式可以通过精简layout文件、多线程处理数据载入等。 2、但是有些Activity的layout文件可能比较大,如果不能动态载入,在显示之前...

    Android编程中activity启动时出现白屏、黑屏问题的解决方法

    综上所述,通过自定义主题、预加载布局、优化启动时间、设置启动画面以及管理资源和依赖,可以有效地解决Android应用在启动时出现的白屏或黑屏问题,提升用户体验。在实践中,开发者应该根据应用的具体情况,结合...

    Android开发中Activity之间切换出现短暂黑屏的解决方法

    在Android开发中,Activity之间的切换有时会导致短暂的黑屏现象,这给用户带来不理想的体验。黑屏的出现主要是由于Activity在启动或切换时需要进行一些初始化工作,如加载数据、绘制界面等,这些操作在后台执行时会...

    Android Activity切换(跳转)时出现黑屏的解决方法 分享

    在Android应用开发中,...总的来说,Android Activity间的切换黑屏问题可以通过设置透明主题得到改善。但同时,开发者还需要关注代码性能优化,以确保Activity的启动和数据加载尽可能快速,提供更流畅的用户界面交互。

    详解Android Activity之间跳转出现短暂黑屏的处理方法

    Android Activity 之间跳转出现...解决 Android Activity 之间跳转出现短暂黑屏的问题需要自定义 Activity 的主题,并将其应用到目标 Activity 上。通过这个解决方案,我们可以提高用户体验,提高应用程序的整体性能。

    Android程序启动时出现黑屏问题的解决方法

    本文将深入解析Android程序启动时黑屏问题的原因,并提供有效的解决策略。 首先,理解黑屏出现的原因至关重要。当Android应用程序启动时,系统会先加载主Activity,通常这个过程包括初始化数据、加载布局、执行一些...

    Android app启动时黑屏或者白屏的原因及解决办法

    在Android应用开发中,用户在启动应用时可能会遇到黑屏或白屏的问题。这通常是由于应用程序在加载主界面之前,屏幕上显示的是默认的窗口背景。本文将深入探讨这个问题的原因,并提供几种解决方案。 首先,我们来...

    Android 避免APP启动闪黑屏的解决办法(Theme和Style)

    此外,当我们切换Activity时,如果两个Activity之间没有合适的过渡动画或Theme设置,也可能出现短暂黑屏。为了解决这个问题,可以在切换的Activity中同样应用上述的Theme。 最后,让我们快速浏览一下一些常见的...

    Android中使用Theme来解决启动app时出现的空白屏问题

    在Android开发中,用户在打开应用时可能会遇到短暂的白屏或黑屏现象,这通常是由于启动时App的主界面还未完全渲染导致的。本文将详细介绍如何通过设置Theme来解决这个问题。 首先,我们要理解造成白屏或黑屏的原因...

    Android Splash界面白屏、黑屏问题的解决方法

    总结来说,Android应用在启动时的白屏、黑屏问题主要是由于系统默认的启动窗口和Activity的启动流程所致。通过自定义全屏且透明的主题,我们可以有效地解决这个问题,为用户提供更流畅的启动体验。同时,理解这个...

    Android实现类似IOS右滑返回的效果(原因分析及解决办法)

    首要问题是在主Activity上开启滑动返回时,返回时可能遇到黑屏或者只看到桌面背景而看不到上一个Activity的界面。这是因为为了实现滑动返回,我们需要在Activity的主题中设置`android:windowIsTranslucent=true`,这...

    Android App应用启动分析与优化

    2. 设置透明Theme:通过设置`android:windowBackground`为`@android:color/transparent`和`android:windowIsTranslucent`为`true`,使得启动时界面完全透明,直到所有内容初始化完成后再一次性显示。 两种方法各有...

Global site tag (gtag.js) - Google Analytics