Android:在启动的Activity上设置Window Background

时间:2011-01-29 16:13:16

标签: android background android-layout

所以我已经阅读了Romain Guy的blog post关于设置Window背景和深刻表现的信息,并且我试图模仿它。这是一个简单的解决方案,并不确定为什么我不能让这个工作,但活动只是拒绝接收定向背景。

我有一个ListView,onListItemClick启动一个新的Activity,需要3-5秒才能完全加载。当用户在等待时,我想绘制一个windowBackground,以便他们在实际准备好之前“看到”该活动。这是我的代码:

针对已启动活动的AndroidManifest代码段:

<activity 
        android:name=".activity.EditorActivity"
        android:screenOrientation="portrait"
        android:windowBackground="@drawable/background_editor">

EditorActivity的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView 
    android:id="@+id/editor"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:text="Editor" />
</FrameLayout>

最后,drawable在Manifest中设置,background_editor.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/editor_bg"
    android:tileMode="repeat" />

editor_bg是一个位于可绘制文件夹中的.png文件。

最终结果是EditorActivity被启动,我看到的是默认的黑色背景,其中“Editor”文本显示为白色(我添加了这个以测试XML文件是否正确加载。

我也尝试通过android:background =“@ android:color / transparent”将FrameLayout和TextView的背景设置为透明,可能认为它们默认为黑色背景,但没有运气。

已经很长一段时间了,我确信我错过了一些简单的事情......我在这里犯的任何明显错误都会在这里出现?

3 个答案:

答案 0 :(得分:46)

尝试以编程方式启动新活动之前设置窗口背景。

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

答案 1 :(得分:3)

我遇到了同样的问题,浪费了我的一天。我们无法在java中设置主题,就像在我的情况下控件来到我的启动活动的创建很晚。直到那个时候黑屏保持可见。

这让我知道窗口必须从我们在清单中指定的主题进行管理。

我有清单:

<activity
        android:name=".main.activities.SplashScreen"
        android:theme="@style/Splash"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

现在我创建的主题如下:

<style name="Splash" parent="@style/Theme.AppCompat.Light">
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@color/green_09</item>
    <item name="colorPrimary">@color/green_09</item>
    <item name="windowActionBar">false</item>
</style>

在包含位图资源的可绘制资源中进行初始化,我必须调整一下以使其看起来完美而不是拉伸并位于中心:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:gravity="fill"
    android:src="@drawable/splash_screen" />

答案 2 :(得分:1)

如果我在styles.xml中的主题样式中声明它,它对我有用:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"   
xmlns:app="http://schemas.android.com/apk/res-auto">

    <style name="CustomTheme" parent="android:Theme.Holo.NoActionBar">
        <item name="android:windowBackground">@color/bg_evening</item>
    </style>

</resources>

在清单中我将此主题设置为我的应用程序:

<application
    android:name="com.my_app.pack"
    android:theme="@style/CustomTheme" >
...

或我的一项活动:

<activity
    android:name="..."
    android:theme="@style/CustomTheme">
...

您可以声明多个主题样式并将其中任何一个添加到您的任何活动中,这将覆盖设置为应用程序的主题