23

如何在活動主題/樣式中使用背景圖片?Android活動背景圖片

如果我做到這一點使用顏色:

<style name="CustomTheme" parent="android:Theme.Light"> 
    <item name="android:windowBackground">@color/custom_theme_color</item> 
</style> 

它工作正常,但如果我更換行:

<item name="android:windowBackground">@drawable/splash_image</item> 

的圖像顯示正確,但所有的內容被壓扁成屏幕左上角的一個小塊。狀態欄下方的陰影也被切斷或混亂。

我使用的是Android版Mono,圖像是一個有效的九貼片PNG。

+0

對於大家閱讀這裏...請注意,您在windowBackground中使用的drawable作爲定製的AppTheme將被加載完全解碼到您的堆中。由於在運行時完成了解碼,即使是小尺寸的圖像(如90KiB)也可能導致90MiB以上的分配。這會導致OutOfMemory問題比光線更快。 :) – JacksOnF1re

+0

有關其他信息,請閱讀此文章如何正確設置啓動畫面:https://www.bignerdranch.com/blog/splash-screens-the-right-way/ – JacksOnF1re

回答

9

我不使用主題或任何東西,所以我不知道如何將影響到這一點,但我設置我的背景是這樣的:在

的onCreate

getWindow().setBackgroundDrawableResource(R.drawable.background_image); 

+3

我不鼓勵這種方法,因爲它定義更清晰它在主題中。它允許Android在活動啓動時立即顯示它,而不是在代碼執行時看到短暫的閃爍。 –

16

我也不要」 T選用的主題,所以在活動的佈局我想補充

android:background="@drawable/splash_image" 
+4

謝謝你們,但我需要使用一個主題,因爲佈局內容來得晚。在Android的單聲道中,啓動時會有幾秒鐘的延遲。我需要在運行時實際啓動之前顯示圖像。由於佈局僅在運行時啓動後應用,因此我必須使用該主題,因爲它立即應用。 – Matthew

+0

沒問題。我現在正在調查主題,因爲我提出了一個問題,如果我能夠解決這個問題,我會盡快回復您。 – VicVu

+0

這是什麼運氣? – Matthew

4

我需要有一個看起來像我的應用程序的初始活性,跑進同樣的問題啓動圖像。我用windowContentOverlay而不是windowBackground運氣不錯。該drawable出現在狀態欄的下方,與真實佈局的位置完全相同。它曾在Android 2.2,Android 3.0和Android 4.1上工作。

這是我的風格:

<style name="SplashTheme" parent="android:style/Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@drawable/splash</item>  
</style> 

我splash.xml繪製模仿我的用戶界面採用頭層列表:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!--- Background; tile is broken on Android 2.2 so just have super wide background that will get clipped --> 
    <item> 
     <bitmap android:gravity="top|left" android:src="@drawable/splash_background" /> 
    </item> 

    <!--- Icon left justified --> 
    <item> 
     <bitmap android:gravity="top|left" android:src="@drawable/header_icon" /> 
    </item> 

    <!--- Buttons/etc right justified --> 
    <item> 
     <bitmap android:gravity="top|right" android:src="@drawable/splash_buttons" /> 
    </item> 
</layer-list> 

我相信動作條也有一些內置的方式來處理這個問題,如果你的應用使用它。 MonoIO sample似乎有這樣一個啓動圖像。

+0

是否可以將textview添加到splash.xml中?我需要顯示帶有徽標和文本的啓動屏幕,例如Connecting ... – v4r

+0

如何調整背景圖像的大小,以適應屏幕寬度並保持縱橫比,使用此解決方案? – pfaehlfd

+0

我幾年沒有做Android開發。推薦新的StackOverflow問題。 – t9mike

6

我的解決方案是將android:windowBackground更改爲android:background。

<?xml version="1.0" encoding="UTF-8" ?> 
<resources> 
    <style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:background">@drawable/splash</item> 
    <item name="android:windowNoTitle">true</item> 
    </style> 
</resources>