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 :

Récupérer la taille d'une ExpandableListView


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut Récupérer la taille d'une ExpandableListView
    Bonjour,

    Dans le cadre de la construction d'une ExpandableListView (ELV) à plusieurs niveaux (voir mon post précédent), j'ai besoin à un moment de récupérer / fixer la taille de l'ELV qui est imbriquée dans la première.

    Dans le tutoriel trouvé (ici), on calcule en fait cette taille en "comptant" le nombre de lignes qui vont être affichées dans chaque groupe qui est "expand". Ensuite comme toutes les lignes "child" et "group" sont de taille fixe on peut facilement calculer la taille de l'ELV complète.

    Dans mon cas, je voudrais quelque chose de plus dynamique, car les vues construites par getChildView() et getGroupView() peuvent avoir des tailles différentes.

    Malheureusement je n'arrive pas à récupérer la taille des différentes vues que je construis. getHeight() me renvoie systématiquement 0. Ce qui est plus que probablement causé parce que :

    "Be aware not to call getWidth() or getHeight() too early before the view have been laid out on the screen, otherwise "0" will be returned."


    Je ne sais pas trop comment m'y prendre ...

    Actuellement je fais ceci :

    Dans l'Adapter de mon ELV, quand je construit mon "Embedded ELV".
    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
     
    	public View getChildView(int groupPosition, int childPosition,
    			boolean isLastChild, View convertView, ViewGroup parent) {
    			ExpListAssetSubCatAdapter adapter = new ExpListAssetSubCatAdapter(
    					context, (AssetSubCat) getChild(groupPosition,
    							childPosition));
    /* Dans cette méthode j'appelle une fois getChildView() et getGroupView() pour toutes les lignes, et ainsi générer un "cache" de ces vues. J'espérais qu'en les générant "plus tôt",getHeight() me donne une autre valeur que 0 ... Mais ça ne marche pas
    */			
    adapter.initDebug();
     
    			expList = new EmbeddedExpListView(context);
    			int testHeight = calculateHeight(adapter);
    			expList.forceHeight(testHeight);
     
    			expList.setAdapter(adapter);
    			int nb = expList.getCount();
    			for (int i = 0; i < nb; i++) {
    				expList.expandGroup(i);
     
    			}
     
    			expList.requestLayout();
            }
    return expList;
    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
     
    	private int calculateHeight(ExpListAssetSubCatAdapter adapter) {
    		if (adapter == null) {
    			return 0;
    		} else {
    			int calculatedHeight = 0;
    			int groupCount = adapter.getGroupCount();
    			for (int groupPosition = 0; groupPosition < groupCount; groupPosition++) {
    				calculatedHeight += adapter.getGroupView(groupPosition, false,
    						null, null).getHeight();
    				int childCount = adapter.getChildrenCount(groupPosition);
    				for (int childPosition = 0; childPosition < childCount; childPosition++) {
    					calculatedHeight += adapter.getChildView(groupPosition,
    							childPosition, false, null, null).getHeight();
    				}
    			}
    			return calculatedHeight;
    		}
    	}
    EmbeddedExpListView
    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
    public class EmbeddedExpListView extends ExpandableListView {
    	private int height;
     
    	public EmbeddedExpListView(Context context) {
    		super(context);
    		// TODO Auto-generated constructor stub
    	}
     
    	/**
             * Recalcule la hauteur de l'ELV.
             */
    	public void forceHeight(int newHeight) {
    		height = newHeight;
    	}
     
    	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    		setMeasuredDimension(getMeasuredWidth(), height);
    	}

    Je ne suis pas contre un peu d'aide :-)

    Lionel

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Normalement getHeight et getWidth renvoient 0 lorsque l'élément n'est pas encore affiché.
    Si tu exécute ces méthodes dans le onCreate, c'est sur à 100% qu'elles vont renvoyer 0.
    Essaie plutôt de le faire dans le onStart ou même dans le onWindowFocusChanged

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut
    Tu me proposes donc de créer toutes ces ELV imbriquées dans le onCreateView() de mon Fragment (car je travaille dans un fragment).

    Ensuite je crée une méthode qui va venir ajuster la taille de ces ELV dans la méthode onWindowFocusChanged() de mon fragment ? Mais cette méthode n'existe pas pour les fragments ( ).

    Je viens de tester dans le onStart(), mais ça ne donne rien du tout.

    Je vais essayer de fournir un code simplifier de ce que je veux faire, car ça ne me semble peut être pas assez clair pour que vous puissiez m'aider efficacement.

    Lionel

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Il existe un callback onStart pour les fragments

Discussions similaires

  1. Récupérer la taille d'une image dans un canevas
    Par Exca dans le forum Tkinter
    Réponses: 3
    Dernier message: 01/12/2006, 12h23
  2. Récupérer la taille d'une JFrame
    Par ®om dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 24/08/2006, 23h02
  3. [MySQL] Récupérer la taille d'une BDD
    Par JoN28fr dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/04/2006, 11h58
  4. [Images] Récupérer la taille d'une image
    Par Linaa dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 31/10/2005, 22h43
  5. Récupérer la taille d'une image dans un fichier (GIF/JPEG)
    Par SheikYerbouti dans le forum Multimédia
    Réponses: 4
    Dernier message: 12/05/2005, 14h17

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