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>