Jump to content

Placement absolu


MoonlightShadow

Recommended Posts

Il est deprecated car son utilisation est déconseillée, en effet, un placement absolu rend plus difficile l'adaptation à de multiples résolutions d'écrans, et est contraire à ce qu'Android essaye de faire. Mais si tu en as vraiment besoin, tu peux l'utiliser.

Sinon, peut-être qu'un RelativeLayout avec des marges dans les LayoutParams peut avoir le même effet, sans utiliser de classe dépréciée.

Link to comment
Share on other sites

J'ai trouvé une méthode de View, offsetLeftAndRight (avec l'équivalent offsetTopAndBottom), qui permet de décaler la view. Cependant le comportement est assez étrange puisque j'ai l'impression que ça décale que temporairement, et surtout si on l'appelle comme ça ça ne fait rien! J'ai réussi à avoir un décalage lorsque je l'ai appelée depuis un autre thread.

Quelqu'un connait cette fonction et sait également comment l'utiliser?

Link to comment
Share on other sites

  • 2 weeks later...

Bon j'ai réussi à placer mes vues en absolu en faisant mon propre layout de placement en absolu...

Mais il me reste un problème qui ne vient pas de mon layout puisque en utilisant l'AbsoluteLayout (deprecated), j'ai le même bug. En fait quand je place ma vue dans mon layout de sorte qu'elle dépasse de l'écran (ne serait-ce que d'un pixel) sur le haut, le bas ou la droite ya aucun problème (elle s'affiche bien, tronquée par le bord de l'écran). Mais si je fais la même chose sur le coté gauche de l'écran, elle n'apparaît pas du tout! Est-ce que quelqu'un sait pourquoi?

Link to comment
Share on other sites

Pas de problème si tu dépasses par le haut ?

A droite et en bas ca s'expliquerait par le fait que le point de référence de la vue dessinée, qui se trouve en haut à gauche, ne sort pas de l'écran quand tu débordes.

Tout le mécanisme de dessin est décrit ici : http://developer.android.com/guide/topics/ui/how-android-draws.html

Il est indiqué notamment:

The framework will not draw Views that are not in the invalid region, and also will take care of drawing the Views background for you.

You can force a View to draw, by calling invalidate().

Tu risques de devoir surcharger onMeasure() et/ou onLayout() quelque part... J'en sais pas plus.

Link to comment
Share on other sites

Non pas de problèmes par le haut... c'est d'autant plus bizarre que mon appli est en landscape, donc ça devrait poser problème pour le haut et la gauche si c'était une histoire du point haut-gauche!

En ce qui concerne la surcharge de onMeasure et/ou onLayout, vu que j'ai fait mon propre layout, ces méthodes sont déjà toutes les deux surchargées, et je ne sais pas quoi faire de plus dedans...

Sinon une idée pour faire autrement?

Link to comment
Share on other sites

Une SurfaceView est une View et non pas un ViewGroup donc il n'est pas possible d'y ajouter des sous-vues.

offsetLeftAndRight et offsetTopAndBottom marche très bien mais leur action n'est valable que jusqu'au projet relayout. A mon avis c'est que tu effectues des requestLayout() et c'est pour ça que ça change ;).

Pour le problème de vues qui ne s'affiche pas, on dirait un problème dans tes calculs. Le framework regarde l'intersection des frames de chaque vues pour savoir si cela vaut le coup ou non de dessiner. Affiche les positionnements de tes vues à chaque instant et tu verra si une valeur ne devient pas absurde ;).

Link to comment
Share on other sites

Je viens de comprendre le pourquoi du problème (pas encore la solution ^^ ).

En effet la frame de la view était sortie du viewgroup, le problème c'est que je ne le savais pas puisque la view n'est pas dessinée dans sa frame (j'y ai appliqué une rotation de 90 degrés depuis son point 0,0 !).

Mais bon maintenant que je sais pourquoi je vais pouvoir avancer (mais après manger ^^ )

Merci pour vos réponses

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...