1

我希望我的程序在每个活动中都有相同的背景颜色。所以我把这行代码放在每个 layout.xml 文件的每个主布局中。

android:background="@color/background"

到目前为止一切顺利,它可以工作并且看起来不错。但是,我最近开始注意到,当我调用一个新活动时,它首先有一个白色背景,然后立即变为背景颜色。但是很短的时间里,我的眼睛里总是有这种白色,这真的很烦人。

有谁知道如何避免这个问题?我希望我的活动能够正常使用新的背景颜色。

编辑: 嗯,我使用的每个活动都有相同的背景。这就是我开始新活动的方式:

startActivity( new Intent( getActivity(), ActivityAlbumContent.class ) );

到目前为止,我只有这个,MainActivity但它也是在应用程序启动时,MainActivity它首先具有白色背景。我现在只能假设我稍后将创建的活动也会有同样的问题。

这是在我的styles.xml 中。

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

windowBackground 属性以某种方式不存在。我在清单文件中将此主题设置为我的应用程序,但随后它崩溃了。

06-30 20:43:49.048: E/AndroidRuntime(15411): FATAL EXCEPTION: main
06-30 20:43:49.048: E/AndroidRuntime(15411): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.davlog.mplayer/com.davlog.mplayer.MainActivity}: java.lang.NullPointerException
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2249)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.ActivityThread.access$700(ActivityThread.java:154)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.os.Looper.loop(Looper.java:137)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.ActivityThread.main(ActivityThread.java:5306)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at java.lang.reflect.Method.invokeNative(Native Method)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at java.lang.reflect.Method.invoke(Method.java:511)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at dalvik.system.NativeStart.main(Native Method)
06-30 20:43:49.048: E/AndroidRuntime(15411): Caused by: java.lang.NullPointerException
06-30 20:43:49.048: E/AndroidRuntime(15411):    at com.davlog.mplayer.MainActivity.onCreate(MainActivity.java:29)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.Activity.performCreate(Activity.java:5255)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
06-30 20:43:49.048: E/AndroidRuntime(15411):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
06-30 20:43:49.048: E/AndroidRuntime(15411):    ... 11 more
4

1 回答 1

2

您可以android:windowBackground在自定义主题中使用该属性来设置 Activity 的背景颜色,包括 Activity 加载时的颜色。

例如,定义这种风格:

<style name="Theme.MyApp" parent="android:Theme">
    <item name="android:windowBackground">@color/my_app_color</item>
</style>

然后在您的清单中选择主题,如下所示:

<application
        android:theme="@style/Theme.MyApp">

    <!- ... ->

</application>

这消除了android:background为每个布局设置的需要,并在加载活动时显示适当的颜色。

请注意,如果您支持 API 14 以上的任何设备,您可能希望拥有一个values-14/styles.xml继承自 Holo 主题的此主题的副本。如果你只支持 14 台以上的设备,那么你只需要一个继承自 Holo 主题的主题。

于 2014-06-30T18:33:50.290 回答