android改变背景颜色太慢了

时间:2014-06-30 18:22:36

标签: android android-layout android-theme android-activityrecord

我希望我的程序在每个活动中都有相同的背景颜色。所以我将这行代码放在每个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

1 个答案:

答案 0 :(得分:2)

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

例如,定义此样式:

<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以上的任何设备,您可能希望拥有一个继承自Holo主题的此主题的values-14/styles.xml副本。如果您只支持14以上的设备,那么您只需要一个继承Holo主题的主题。