IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Dimension d'une vue au démarrage d'une activité


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut Dimension d'une vue au démarrage d'une activité
    Bonjour,

    N'hésitez pas à me signaler si la question a déjà été traitée (après une petite recherche, je n'ai pas trouvé).

    Ma question est la suivante : comment obtenir les dimensions d'une vue lorsqu'on est encore au stade des méthodes onCreate, onStart, ou onResume. Lorsque je fais tourner le code suivant, j'obtiens systématiquement 0 / 0 dans le logcat pour les dimensions de l'imageView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ImageView;
     
    public class MainActivity extends Activity {
     
        public static final String APP_TAG="Mon_tag";
        public ImageView image;
     
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.activity_main);
     
            image = (ImageView) findViewById(R.id.main_image);
     
            Log.i(APP_TAG, "onCreate(): fin ! / dimensions de l'imageView: "
                + image.getWidth() + " / " + image.getHeight());
        }
     
        @Override
        public void onStart(){
            Log.i(APP_TAG, "onStart(): début ! / dimensions de l'imageView: "
                    + image.getWidth() + " / " + image.getHeight());
            super.onStart();
            Log.i(APP_TAG, "onStart(): fin ! / dimensions de l'imageView: "
                    + image.getWidth() + " / " + image.getHeight());
        }
     
        @Override
        public void onResume(){
            Log.i(APP_TAG, "onResume(): début ! / dimensions de l'imageView: "
                    + image.getWidth() + " / " + image.getHeight());
            super.onResume();
            Log.i(APP_TAG, "onResume(): fin ! / dimensions de l'imageView: "
                    + image.getWidth() + " / " + image.getHeight());
        }
    }
    Le XML définissant l'ImageView est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
     
        <ImageView
            android:id="@+id/main_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
     
    </LinearLayout>
    D'avance merci pour vos réponses !

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Essayes celui-ci :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
           super.onWindowFocusChanged(hasFocus);
           Log.e("WIDTH",""+image.getWidth());
           Log.e("HEIGHT",""+image.getHeight());
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Je te conseille plutot celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
        {
            @Override
            public boolean onPreDraw()
            {
                view.getViewTreeObserver().removeOnPreDrawListener(this);
                width = view.getMeasuredWidth();
                height = view.getMeasuredHeight();
                return true;
            }
        });

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut
    Merci à tous les deux pour vos réponses !

    Ces deux solutions me semblent pouvoir fonctionner dans beaucoup de cas. Néanmoins, j'observe que onPreDraw s'exécute après onCreate, onStart, et onResume. En particulier, cela ne permet pas de récupérer les dimensions de la vue dans onCreate. Quant à onWindowFocusChanged, elle s'exécute encore après onPreDraw.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Crois moi, mon code marche très bien. Tu dois l'ajouter dans le onCreate(), et remplacer "view" par "image" dans ton cas.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut
    Oui, tout-à-fait, ton code marche très bien, j'ai d'ailleurs fait exactement ce que tu préconises.
    Ma remarque (c'est peut-être du pinaillage) c'est simplement que la méthode onPreDraw du listener ne sera appelée qu'après les méthodes onCreate, onStart, et onResume. En fait il n'est peut-être tout simplement pas possible d'obtenir les dimensions de la vue à ce stade du cycle de vie de l'activité.

Discussions similaires

  1. Retourner sur une vue 1 à partir d'une vue 2
    Par pitchu dans le forum Android
    Réponses: 2
    Dernier message: 24/04/2015, 22h21
  2. Réponses: 6
    Dernier message: 31/10/2012, 16h01
  3. Réponses: 2
    Dernier message: 23/01/2010, 19h37
  4. lancer une application au démarrage ou une autre..
    Par Mihalis dans le forum Delphi
    Réponses: 6
    Dernier message: 09/05/2007, 19h35
  5. Réponses: 4
    Dernier message: 11/10/2005, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo