web-dev-qa-db-fra.com

Android: définir l'arrière-plan de la fenêtre sur l'activité lancée

J'ai donc lu Romain Guy article de blog sur la configuration de l'arrière-plan de Windows et des performances améliorées, et j'essaie d'imiter cela. C'est une solution si simple et je ne sais pas pourquoi je ne peux pas faire fonctionner cela, mais l'activité refuse simplement de récupérer l'arrière-plan dirigé.

J'ai un ListView qui onListItemClick lance une nouvelle activité, celle qui prend 3-5 secondes pour se charger complètement. Pendant que l'utilisateur attend, j'aimerais dessiner un windowBackground afin qu'il "voit" l'activité avant qu'elle ne soit réellement prête. Voici mon code:

Extrait AndroidManifest pour l'activité lancée:

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

La disposition XML pour 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>

Et enfin, le dessinable étant défini dans le manifeste, 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 est un fichier .png situé dans le dossier dessinable.

Le résultat final est le EditorActivity est lancé, et tout ce que je vois est le fond noir par défaut avec le texte "Editor" affiché en blanc (j'ai ajouté cela pour tester que le fichier XML se chargeait correctement.

J'ai également essayé de définir l'arrière-plan de FrameLayout et TextView sur transparent via Android: background = "@ Android: color/transparent", pensant peut-être qu'ils étaient par défaut sur un fond noir, mais pas de chance.

Cela fait quelques jours, je suis sûr qu'il me manque quelque chose de simple ... des erreurs évidentes que je fais ici?

25
Paul Mennega

Essayez de définir l'arrière-plan de la fenêtre avant de lancer la nouvelle activité par programme.

getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
53
Zarokka

J'ai rencontré le même problème et j'ai perdu ma journée dessus. Nous ne pouvons pas définir le thème dans Java comme dans mon cas, le contrôle est arrivé à la création de mon activité de démarrage très tard. Jusqu'à ce moment, l'écran noir reste visible.

Cela m'a donné une idée que la fenêtre doit être gérée à partir du thème que nous spécifions dans le manifeste.

Il y a le manifeste que j'ai:

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

Maintenant, le thème que j'ai créé est le suivant:

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

Splash dans la ressource drawable qui contient une ressource bitmap, je dois ajuster un peu pour la rendre parfaite non étirée et au centre:

<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:antialias="true"
    Android:dither="true"
    Android:gravity="fill"
    Android:src="@drawable/splash_screen" />
4
Gem

cela fonctionne pour moi si je l'ai déclaré dans un style de thème dans 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>

et dans le manifeste, j'ai défini ce thème pour mon application:

<application
    Android:name="com.my_app.pack"
    Android:theme="@style/CustomTheme" >
...

ou à l'une de mes activités:

<activity
    Android:name="..."
    Android:theme="@style/CustomTheme">
...

vous pouvez déclarer plusieurs styles de thème et ajouter l'un d'eux à n'importe laquelle de vos activités, ce qui remplacera le jeu de thèmes de l'application

2