2015-05-19 92 views
3

我想在運行時設置我的活動的主題,選擇一個主題。我希望所選主題在啓動活動時立即顯示。setTheme的作品,但只有從清單加載主題後

在我的清單的<application>部分中,我設置了一個默認主題android:theme="@style/AppTheme"。然後在我的onCreate()中,我使用setTheme(R.style.DarkAppTheme)將主題設置爲用戶選定的主題(用所選主題替換DarkAppTheme)。

並基於研究,似乎setTheme()應該去onCreate()之前和setContentView(),我這樣做。

雖然這可以在用戶選擇的主題中顯示活動,但活動首先加載看起來像默認主題的東西,然後在短暫延遲後加載正確的主題。

如果我直接在清單中設置用戶選定的主題,那麼會立即按照我的意願加載,但當然這是硬編碼的,我想根據共享首選項動態更改它。

如何避免可見的轉換?我希望用戶選擇的主題從一開始就顯示出來。

謝謝。

回答

0

僅當您的Activity加載時間過長時,纔會出現AndroidManifest的主題。您可以嘗試調整Activity加載並從AndroidManifest刪除android:theme="@style/AppTheme",甚至在這兩個用途之間設置折中。

我希望它能幫助你\ O/

0

的活動有什麼樣子的默認主題,然後在短暫的延遲後首次加載正確的主題負載...我如何避免可見轉換?

有2個部分的活動「輸入/打開」窗口動畫,當您的應用程序首先在主屏幕推出從圖標:

  1. 「暗灰色的矩形出現'動畫。這是啓動應用程序時系統進程繪製的初始空白屏幕(source)。它也被稱爲「主題預覽」屏幕或「閃屏」。
  2. '圓形顯示視圖佈局'。這是您的視圖佈局出現在深灰色矩形上的動畫。它發生在第1部分後。

第1部分是您標識爲「什麼看起來像默認主題」。您可以在活動禁用與下列項目第一部分/應用風格:

<item name="android:windowDisablePreview">true</item> 

這將阻止「暗灰色的矩形出現」動畫,並且只允許「的視圖佈局的圓形顯示」,以因此避免可見的轉換或閃爍。但有一些注意事項:

  1. 您必須確保您的活動快速啓動,因爲在您的佈局完全加載之前,不會有可視動畫反饋給用戶。這就是爲什麼主題預覽通常默認打開的原因。
  2. 它在上下文菜單上導致奇怪的錯誤:對於任何PopupWindow,「輸入」動畫將不再發生,並且它將立即顯示('退出'動畫不受影響)。這也適用於系統PopupWindows,如溢出菜單列表和AutoCompleteTextView的下拉列表。此錯誤發生在Android 4/5/6上,但不在Android 7/8上。更多信息here

windowDisablePreview文檔:

標誌讓您禁用預覽動畫的窗口。默認值是false;如果設置爲true,那麼在向用戶顯示實際實例之前,系統永遠不能使用窗口的主題來顯示它的預覽。

進一步信息:

相關問題