從全屏模式 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,讓狀態欄高度變化在動畫中自然過渡。
// 啟動前設置
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
startActivity(intent);
onCreate 中手動 requestWindowFeature 切換全屏標誌,易加劇閃爍。通過「主題預聲明 + 淡入轉場動畫」雙重保障,徹底消除全屏切換非全屏時的狀態欄閃屏,提升應用專業質感。