android слишком медленно меняет цвет фона

#android #android-layout #android-theme #android-activityrecord

#Android #android-макет #android-тема #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. Как вы вызываете новое действие? Пожалуйста, покажите какой-нибудь код.

2. @joao2fast4u я опубликовал некоторые правки. Однако в вызове моей новой активности нет ничего особенного.

Ответ №1:

Вы можете использовать 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, вы, вероятно, захотите иметь values-14/styles.xml копию этой темы, которая наследуется от темы Holo. Если вы поддерживаете только устройства старше 14, вам нужна только одна тема, которая наследуется от темы Holo.

Комментарии:

1. eclipse не показывает мне атрибут windowBackground, и когда я его устанавливаю, мое приложение вылетает с nullpointerexception

2. Вы устанавливаете его в теме или пытаетесь установить его в представлении в XML вашего макета? NullPointerException Звуки совершенно не связаны, но ваш logcat должен быть в состоянии предоставить больше указаний относительно того, откуда он исходит.

3. Если происходит сбой с помощью a NullPointerException , я могу почти гарантировать, что это не вызвано вашим стилем. В сообщении logcat будет точно указано, какая строка какого класса вызывает NPE — если это один из ваших классов, найдите и исправьте эту ошибку. Если это не один из ваших классов, опубликуйте полный журнал.

4. Я опубликовал журнал, в нем отсутствует 11, но он мне не показывает.

5. Я изменил родительский элемент на AppBaseTheme, и теперь он, похоже, работает. Он не падает и показывает мне правильный цвет фона. Спасибо.