1. 程式人生 > >Activity切換時,可能出現的白色閃屏解決方案

Activity切換時,可能出現的白色閃屏解決方案

今天在app上發現activity在切換的時候,背景的圖片頂部出現了白色的閃爍,起初還認為是actionbar的設定的背景圖片引起的,後來網上搜索了一番,發現不少人也遇到了問題。最後定位就是activity設定的theme引起的,在activity中我設定的是light:

<!-- 相當於holo.light樣式 -->
    <style name="Theme.Mike.Light" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowContentOverlay">@null</item>
        <item name="popupMenuStyle">@style/Widget.Mike.Light.PopupMenu</item>
        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Mike.Light.Widget.PopupMenu.Large</item>
    </style>
而Light 樣式的 windowBackground、colorBackground、colorForeground 等屬性的值均為 light 也就是白色偏亮,所以才會出現白色閃屏。

1、進行簡單修改後:

 <!-- 相當於holo.light樣式 -->
    <style name="Theme.Mike.Light" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowBackground">@color/transparent</item>
          	<item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="popupMenuStyle">@style/Widget.Mike.Light.PopupMenu</item>
        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Mike.Light.Widget.PopupMenu.Large</item>
    </style>

將背景windowBackground和windowIsTranslucent設定transparent和true之後,發現白色的閃屏消失,似乎解決了問題,但是在有軟鍵盤彈出的頁面,由於兩個屬性都設定了透明,就導致了軟鍵盤在收回去的一瞬間時候,出現了上個activity的背景圖

2、再次修改:

 <!-- 相當於holo.light樣式 -->
    <style name="Theme.Mike.Light" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="popupMenuStyle">@style/Widget.Mike.Light.PopupMenu</item>
        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Mike.Light.Widget.PopupMenu.Large</item>
    </style>
去掉windowisTranslucent之後,雖然沒有閃屏出現,也沒有出現上個activity的背景,但是鍵盤在彈出來的時候,鍵盤的window會有黑色的背景閃爍

3、最後就用了另外一個樣式(或者將android:windowBackgroud的背景設定黑色,和下面的效果基本一樣)

 <style name="Theme.Mike" parent="@style/Theme.AppCompat">
        <item name="android:windowContentOverlay">@null</item>
    </style>

這樣雖然看似可以,但是如果activity的背景是白色的,再切換的時候應該就會出現黑色的閃屏

也可以用background設定一個背景圖,來解決,但是對我不是最好的解決方法