首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 全屏切換非全屏 Activity 閃屏問題的動畫解決方案

     編輯:程式設計綜合問答

問題現象

從全屏模式 Activity(隱藏狀態欄)跳轉至非全屏 Activity 時,目標頁面先以全屏顯示,隨後狀態欄彈出將頁面「擠」回非全屏狀態,產生明顯視覺跳動。

根本原因

Android 窗口轉場時,目標 Activity 的 onCreate → onResume 執行速度快於系統窗口管理服務(WMS)應用新窗口屬性(如 FLAG_FULLSCREEN)的速度,導致短暫顯示舊屬性畫面。

優雅解決:轉場動畫淡入

在 styles.xml 定義無動畫或淡入動畫主題:

<style name="AppTheme.Translucent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@style/FadeTransition</item>
</style>

<style name="FadeTransition">
    <item name="android:activityOpenEnterAnimation">@android:anim/fade_in</item>
    <item name="android:activityCloseExitAnimation">@android:anim/fade_out</item>
</style>

在 AndroidManifest.xml 為非全屏 Activity 指定該主題:

<activity android:name=".NormalActivity"
          android:theme="@style/AppTheme.Translucent" />

進階方案:共享元素轉場

若需更平滑體驗,可使用 ActivityOptions.makeSceneTransitionAnimation() 實現共享元素轉場,配合 android:transitionName,讓狀態欄高度變化在動畫中自然過渡。

代碼級快速修復(無需 XML)

// 啟動前設置
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
startActivity(intent);

避坑指南

  • ❌ 不要在 onCreate 中手動 requestWindowFeature 切換全屏標誌,易加劇閃爍。
  • ✅ 統一在主題中聲明窗口屬性,讓系統在窗口創建前完成屬性應用。
  • ✅ 測試 Android 5.0+ 至 14 多版本,確保動畫一致性。

通過「主題預聲明 + 淡入轉場動畫」雙重保障,徹底消除全屏切換非全屏時的狀態欄閃屏,提升應用專業質感。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved