¿Cómo puedo alinear un elemento a la derecha en FrameLayout?

Tengo un FrameLayout que contiene 2 vistas, el segundo es algo así como un Close Button (X) y quiero colocarlo a la derecha.

He intentado layout_gravity = "correcto", pero eso no funcionó.

Este es mi layout 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> 

Le recomiendo que utilice un RelativeLayout

FrameLayout está diseñado para bloquear un área en la pantalla para mostrar un solo elemento. Puede agregar varios hijos a un FrameLayout y controlar su posición dentro del FrameLayout usando la gravedad. Los niños se dibujan en una pila, con el niño más recientemente añadido en la parte superior. El tamaño del diseño del marco es el tamaño de su hijo más grande (más relleno), visible o no (si el padre de FrameLayout lo permite). Las vistas GONE se utilizan para dimensionar sólo si setConsiderGoneChildrenWhenMeasuring () se establece en true.

BTW, ¿desea el botón en la parte superior de la ImageView o al lado de ella? Estás ajustando el ancho del diseño y del imageView al mismo tamaño.


Después del comentario, puedo ver dos opciones:

  • android: paddingLeft = "250dp"

  • haga el tamaño del botón 320dp y agregue un fondo de encargo, sobre todo transparente. Haga que el parche 9 para que pueda determinar dónde agregar el texto en él (ver mi respuesta aquí para saber cómo hacer eso: Cómo crear androide spinner sin triángulo hacia abajo en el lado derecho del widget )

Lea el DOCS:

FrameLayout está diseñado para bloquear un área en la pantalla para mostrar un solo elemento. Generalmente, FrameLayout debe utilizarse para mantener una vista de un solo hijo, ya que puede ser difícil organizar las vistas de los niños de una manera que sea escalable a diferentes tamaños de pantalla sin que los niños se superpongan entre sí. Sin embargo, puede agregar varios hijos a un FrameLayout y controlar su posición dentro del FrameLayout asignando gravedad a cada niño, utilizando el atributo android: layout_gravity.

Tratar:

 <TextView ..... android:layout_gravity="right" /> 

Puede colocar una vista en 9 lugares diferentes dentro de un FrameLayout

Disfrutar

Simplemente coloque sus elementos dentro de FrameLayout en el segundo RelativeLayout . Y use android: layout_alignParentRight = "true" para el elemento que desea alinear a la derecha.

 <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> 

Utilice un RelativeLayout en su lugar.

Programatically, usted puede fijar el margen usando FrameLayout.LayoutParams. Lo siguiente funcionaría para colocar una vista en la parte inferior de la pantalla:

 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); 

¿Desea utilizar FrameLayout o RelativeLayout?

Mi entendimiento dice que FrameLayout se utiliza si desea reemplazar su vista actual por otra vista. Su requisito puede ser cumplido por RelativeLayout.

  • ClassCastException LinearLayout LayoutParams
  • Advertencia: Este <FrameLayout> se puede reemplazar con una etiqueta <merge>
  • Tratando de agregar un fragmento a mi contenedor de fragmentos FrameLayout
  • Crear diseño de forma programática en android - tema
  • Cambiar el contenido de framelayout en el botón de clic
  • Layout_marginLeft funciona correctamente en Android API <11 cuando View in FrameLayout
  • Android: Relativelayout en Framelayout no aparece (Pantalla de vista previa de cámara personalizada)
  • problemas con Android FrameLayout cuando override onDraw
  • Color del fondo del framelayout del remoteview
  • La llamada requiere el nivel 23 de API: error getForeground (), pero es un método FrameLayout ya que API 1
  • Dos diseños de marco en el ejemplo de FragmentTabs de Android Support4Demos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.