#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, и теперь он, похоже, работает. Он не падает и показывает мне правильный цвет фона. Спасибо.