2017-05-30 3 views
0

J'ai une mise en page avec des vues que je dois changer la taille en fonction de certains paramètres, qui dépendent de la largeur de la vue. La largeur est définie sur "match_parent". Alors, quand je tente d'obtenir la largeur, il renvoie 0. Voici ce que je l'ai essayé jusqu'à présent:Android RecyclerView: obtenir la largeur/hauteur de vue avec « match_parent »

  1. mask.getWidth();
  2. mask.getLayoutParams().width
  3. ViewTreeObserver vto = mask.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mask.getViewTreeObserver().removeGlobalOnLayoutListener(this); int width = mask.getMeasuredWidth(); } });

Alors ma question est de savoir comment puis-je obtenir la largeur dans cette situation? Merci.

Répondre

0

Après avoir creusé autour j'ai trouvé une solution qui répond à ma question, mais a un problème majeur que je suis encore à résoudre. Nous pouvons utiliser la méthode post() que chaque View a et ajoute un Runnable à la file d'attente des messages. Donc, si je comprends bien ce qui se passe est après View est pleinement mesurée dans la méthode post() nous pouvons obtenir les dimensions dont nous avons besoin comme ceci:

holder.button.post(new Runnable() { 
       @Override 
       public void run() { 
        width = holder.button.getWidth(); 
       } 
      }); 

Cependant, le problème est ici que RecyclerView n'attendra pas que ce point de vue est mesurée au fur et à ira à la ligne suivante et les lignes ne seront pas mises à jour en fonction des mesures que vous attendez. Si de toute façon a un moyen de résoudre ce problème s'il vous plaît laissez un commentaire. Je vous remercie.