Aller au contenu

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.

Lien vers le commentaire
Partager sur d’autres 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?

Lien vers le commentaire
Partager sur d’autres 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?

Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres 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?

Lien vers le commentaire
Partager sur d’autres 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 ;).

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...