FrameLayout margen no funciona

Mi estructura de diseño es así

LinearLayout FrameLayout ImageView ImageView FrameLayout TextView LinearLayout 

He fijado el margen para los dos ImageView que están dentro de FrameLayout. Pero los márgenes de FrameLayout se descartan y siempre se fija la imagen en la esquina superior izquierda. Si cambio de FrameLayout a LinearLayout el margen funciona correctamente. ¿Cómo manejar esto?

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/inner1" > <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:layout_width="24px" android:layout_height="24px" android:id="@+id/favicon" android:layout_marginLeft="50px" android:layout_marginTop="50px" android:layout_marginBottom="40px" android:layout_marginRight="70px" /> <ImageView android:layout_width="52px" android:layout_height="52px" android:id="@+id/applefavicon" android:layout_marginLeft="100px" android:layout_marginTop="100px" android:layout_marginBottom="100px" android:layout_marginRight="100px" /> </FrameLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" android:layout_marginLeft="10px" android:layout_marginTop="20px" android:textColor="#FFFFFF" android:textSize = "15px" android:singleLine = "true" /> </LinearLayout> 

Tuve el mismo problema y me di cuenta de que la configuración de los márgenes layout_ no funciona hasta que también establece la gravedad del diseño de ImageView, es decir, android:layout_gravity="top" en el archivo de recursos XML, o desde el código: FrameLayout.LayoutParams.gravity = Gravity.TOP; .

Para hacer más claro por qué. La llamada FrameLayout.onLayout () contiene esto (en api v2.3.4 al menos):

  // for each child final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int gravity = lp.gravity; if (gravity != -1) { // handle all margin related stuff 

Así que si la gravedad es -1, no habrá cálculo de margen. Y la cosa es, la gravedad en FrameLayout.LayoutParams se define por:

  gravity = a.getInt(com.android.internal.R.styleable.FrameLayout_Layout_layout_gravity, -1); 

Así que si no se establece la gravedad, no habrá cálculo de margen.

Agrega tu xml a este atributo y vuelve a correr

Android: layout_gravity = "top"

¡todo está bien!

Y usted no establece nuevos params de la disposición como esto;

 FrameLayout.LayoutParams llp = new FrameLayout.LayoutParams(WallpapersActivity.ScreenWidth/2, layH); 

Utilizar de esta manera:

 FrameLayout.LayoutParams llp = (LayoutParams) myFrameLay.getLayoutParams(); llp.height = 100; llp.width = 100; myFrameLay.setLayoutParams(llp); 

Tomado de los documentos de FrameLayout ( enlace )

El tamaño del diseño del marco es el tamaño de su hijo más grande (más el relleno), visible o no (si el padre de FrameLayout lo permite).

Esto parece describir el hecho de que quitará los márgenes. Como boulder mencionado, usted podría tratar de cambiar a relleno, ya que se puede utilizar para producir un efecto similar si se hace correctamente.

Por curiosidad, usted mencionó que funciona bien cuando se utiliza un contenedor LinearLayout , ¿por qué elegir FrameLayout?

¿Has probado android: layout_gravity? Trate de usar android: relleno en usted ImageViews en lugar de android: layout_margin. Los márgenes AFAIK no funcionan correctamente en el diseño del marco. Incluso tuve que escribir diseño personalizado para ese propósito una vez. BTW, ¿cómo quieres allign que ImageViews?

Intente setCropToPadding (true) a ImageView, esto debe ser ayudado!

Usted tiene que fijar la gravedad de la disposición de ImageView, es decir, android: layout_gravity = "top" en el archivo de recursos XML, o desde el código: FrameLayout.LayoutParams.gravity = Gravity.TOP

  • Cómo ajustar contenido de texto en ActionBarSherlock spinner de navegación
  • Diferencia entre getheight () y getmeasuredheight ()
  • ¿Tiene iOS algo similar a RecyclerView de Android?
  • ¿Cómo mostrar 2 vistas, con un gradiente de desvanecimiento efecto en Android?
  • Estado lista estado desplegable y desactivado
  • Asignar propiedad de objeto a listview
  • ¿Qué diseño debo utilizar (css inline-block equivalente)
  • LinearLayout con dos hijos de igual ancho
  • Disposición de Android: ancho de la mitad del padre
  • StaggeredGridLayoutManager reordena los elementos
  • ¿Cómo hacer la disposición de una imagen y el texto a la izquierda y debajo de él?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.