J'ai un FrameLayout qui contient 2 vues, la seconde est quelque chose comme un Close Button (X)
et je veux le positionner à droite.
J'ai essayé layout_gravity = "right", mais cela n'a pas fonctionné.
Ceci est ma mise en page XML:
<FrameLayout Android:layout_width="320dp"
Android:layout_height="wrap_content"
Android:id="@+id/layoutSmallImg">
<ImageView Android:id="@+id/bigImage"
Android:layout_width="320dp" Android:layout_height="wrap_content"/>
<ImageView Android:id="@+id/bigImage"
Android:layout_width="320dp" Android:layout_height="wrap_content"/>
<ImageButton Android:id="@+id/closebutton"
Android:background="@Android:color/transparent"
Android:layout_height="30dp" Android:layout_marginTop="10dp"
Android:layout_alignParentRight="true"
Android:layout_width="30dp" Android:paddingLeft="40dp"
Android:visibility="gone"
Android:src="@drawable/close" />
</FrameLayout>
Je vous recommande d'utiliser une RelativeLayout
à la place
FrameLayout est conçu pour bloquer une zone de l'écran afin d'afficher un seul élément. Vous pouvez ajouter plusieurs enfants à un FrameLayout et contrôler leur position dans FrameLayout à l'aide de la gravité. Les enfants sont dessinés dans une pile, avec le dernier enfant ajouté en haut. La taille de la structure de cadre est la taille de son plus grand enfant (plus le rembourrage) visible ou non (si le parent de FrameLayout le permet). Les vues qui sont GONE ne sont utilisées pour le dimensionnement que si setConsiderGoneChildrenWhenMeasuring () est défini sur true.
BTW, voulez-vous le bouton sur ImageView ou à côté de celui-ci? Vous définissez la largeur de la mise en page et de l'imageView à la même taille.
Après le commentaire, je peux voir deux options:
Android: paddingLeft = "250dp"
faire la taille du bouton 320dp et ajouter un arrière-plan personnalisé, principalement transparent. Faites le patch 9 pour que vous puissiez déterminer où ajouter le texte (voir ma réponse ici pour savoir comment faire cela: Comment créer un spinner Android sans triangle vers le bas à droite du widget )
Lire le DOCS:
FrameLayout est conçu pour bloquer une zone de l'écran à afficher un seul article. Généralement, FrameLayout doit être utilisé pour contenir un seul vue enfant, car il peut être difficile d’organiser des vues enfants dans un fichier façon qui est évolutive à différentes tailles d'écran sans les enfants qui se chevauchent. Vous pouvez cependant ajouter plusieurs enfants à un FrameLayout et contrôle leur position dans FrameLayout de attribuer la gravité à chaque enfant, en utilisant Android: layout_gravity attribut.
Essayer:
<TextView
.....
Android:layout_gravity="right" />
Vous pouvez placer une vue à 9 endroits différents dans un FrameLayout
Prendre plaisir
Placez simplement vos éléments dans FrameLayout dans le second RelativeLayout. Et utilisez Android: layout_alignParentRight = "true" pour l'élément que vous souhaitez aligner à droite.
<FrameLayout Android:layout_width="320dp" Android:layout_height="wrap_content"
Android:id="@+id/layoutSmallImg">
<RelativeLayout
Android:id="@+id/content"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<ImageView Android:id="@+id/bigImage"
Android:layout_width="320dp"
Android:layout_height="wrap_content"/>
<ImageButton Android:id="@+id/closebutton"
Android:background="@Android:color/transparent"
Android:layout_height="30dp" Android:layout_marginTop="10dp"
Android:layout_alignParentRight="true"
Android:layout_width="30dp" Android:paddingLeft="40dp"
Android:visibility="gone"
Android:src="@drawable/close" />
</RelativeLayout>
</FrameLayout>
Utilisez un RelativeLayout à la place.
Par programme, vous pouvez définir la marge à l’aide de FrameLayout.LayoutParams. Ce qui suit fonctionnerait pour placer une vue au bas de votre écran:
int desired_height_of_content = //whatever your want the height of your view to be
FrameLayout layout = new FrameLayout(this);
FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, desired_height_of_content);
int difference = screen_height - desired_height_of_content
flp.setMargins(difference, 0, 0, 0);
layout.addView(your_view, flp);
Voulez-vous utiliser FrameLayout ou RelativeLayout?
D'après ce que j'ai compris, FrameLayout est utilisé si vous souhaitez remplacer votre vue actuelle par une autre. Votre exigence peut être remplie par RelativeLayout.