Définir la position absolue d'un point de vue
Est-il possible de définir la position absolue d'un point de vue sur Android? (Je sais qu'il y a un AbsoluteLayout
, mais il est obsolète...)
Par exemple, si j'ai un 240x320px écran, comment pourrais-je ajouter une ImageView
qui est 20x20px de telle sorte que son centre est à la position (100,100)?
- voir aussi
view.setTranslationX()
ouview.offsetLeftAndRight()
- J'ai juste sorti d'une bibliothèque qui peut avoir été d'intérêt ici. github.com/ManuelPeinado/ImageLayout
- C'est si difficile parce que 99,9% du temps de positionnement absolu est une mauvaise idée sur android. Si vous écrivez une application qui ne pourront jamais être exécuté sur un périphérique physique, alors ce pourrait travailler, mais qui n'est généralement pas une hypothèse sûre à faire. Par exemple, ne téléchargez pas ce à google play. Il fonctionne très bien sur iOS, car il ya seulement une poignée de matériel, et vous pouvez construire votre propre table de montage séquentiel pour chacun.
- Dans mon application multi-plateforme, je reçois la taille de l'écran et la base de tout cela. Je viens de passé à la "obsolète" AbsoluteLayout, et il fonctionne très bien.
- assez juste, mais c'est ce que l'un Relatif à la Mise en page ou LinearLayout fera pour vous automatiquement.
- Pourquoi était-AbsoluteLayout obsolète? Sûrement le besoin de placer des widgets dans des positions exactes pour certaines applications n'a pas disparu!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser RelativeLayout. Disons que vous vouliez un 30x40 ImageView à la position (50,60) à l'intérieur de votre mise en page. Quelque part dans votre activité:
Plus d'exemples:
Lieux deux 30x40 ImageViews (un jaune, un rouge) à (50,60) et (80,90), respectivement:
Place un 30x40 jaune ImageView au (50,60) et un autre 30x40 rouge ImageView <80,90> par rapport à le jaune ImageView:
ImageView
mettre, ne serait-il pas préférable d'utiliser unFrameLayout
?En général, vous pouvez ajouter un Affichage dans une position spécifique à l'aide d'un FrameLayout comme conteneur en spécifiant le leftMargin et topMargin attributs.
L'exemple suivant va mettre en place un 20x20px ImageView à la position (100,200) à l'aide d'un FrameLayout comme plein écran contenant:
XML
Activité /Fragment /affichage Personnalisé
Cela fera l'affaire parce que les marges peuvent être utilisés comme absolues (X,Y) les coordonnées sans un RelativeLayout:
Juste pour ajouter à Andy Zhang réponse ci-dessus, si vous le souhaitez, vous pouvez donner param rl.addView, apporter des modifications plus tard, donc:
Pourrait tout aussi bien être écrit comme:
Donc, si vous conservez les paramètres de la variable, vous pouvez changer la disposition de la iv à tout moment après l'ajouter à rl.
Une version plus propre et dynamique sans coder en dur toutes les valeurs de pixels dans le code.
Je voulais position d'une boîte de dialogue (qui, je le gonfler à la volée) exactement au-dessous d'un cliqué bouton.
et résolu de cette façon :
Cependant, vous devez assurez-vous que le parent disposition de
myView
est une instance deRelativeLayout
.code plus complet :
De cette façon, vous pouvez toujours attendre la vue cible pour s'adapter à tous les paramètres de mise en page définie à l'aide de mise en page des fichiers XML, au lieu de coder en dur ces pixels/dps dans votre code Java.
Lieu, une vue sur votre désir X & Y point
fichier de mise en page
Classe Java
Fait
Juste au cas où ça peut aider quelqu'un, vous pouvez également essayer cette animation ViewPropertyAnimator comme ci-dessous
crédits à bpr10 répondre
Essayer de code ci-dessous pour définir la vue sur l'emplacement spécifique :-
Mon code pour Xamarin,
Je suis à l'aide de FrameLayout à cette fin, et voici mon code:
Il a été utile pour moi, car j'avais besoin de la propriété de vue se superposent les uns aux autres sur la base de leur apparence, de l'e.g le point de vue d'obtenir empilés les uns au-dessus des autres.