Android: установка фона окна для запущенного Activity - PullRequest
22 голосов
/ 29 января 2011

Итак, я прочитал запись в блоге Ромена Гая о настройке фона окна и достигнутой производительности, и пытаюсь подражать этому. Это такое простое решение, и я не уверен, почему я не могу заставить его работать, но действие просто отказывается подхватить направленный фон.

У меня есть ListView, который onListItemClick запускает новую активность, которая занимает 3-5 секунд для полной загрузки. Пока пользователь ждет, я бы хотел нарисовать windowBackground, чтобы они «увидели» действие до того, как оно действительно будет готово. Вот мой код:

Фрагмент AndroidManifest для запущенного Действия:

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

XML-макет для EditorActivity:

<?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>

И, наконец, набор рисования, заданный в манифесте, 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.

Я также пытался установить прозрачность фона FrameLayout и TextView с помощью android: background = "@ android: color / transparent", думая, что, возможно, они по умолчанию настроены на черный фон, но не повезло.

Прошло много дней, я уверен, что упускаю что-то простое ... какие-то очевидные ошибки, которые я здесь делаю?

Ответы [ 3 ]

47 голосов
/ 08 апреля 2013

Попробуйте установить фон окна перед запуском нового действия программно.

getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
3 голосов
/ 03 мая 2016

Я столкнулся с той же проблемой и потратил на нее весь свой день.Мы не можем установить тему в 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" />
1 голос
/ 08 октября 2015

это работает для меня, если я объявил это в стиле темы в 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">
...

Вы можете объявить несколько стилей темы и добавить любой из них к любому из ваших действий, что переопределит тему, установленную для приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...