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?
- Android El teclado suave flotará solo un diseño específico
- RecyclerView con elementos de contenido de ajuste
- Cómo acceder a los recursos de dibujo (color) en java
- Cómo hacer layout_height y layout_width con igual tamaño
- animateLayoutChanges no animar la eliminación de la flecha hacia atrás desde la barra de herramientas
<?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>
- Carpeta extraíble android para pantallas grandes
- Disposición de Android, configuración de botones para tener el mismo tamaño
- El editor de diseño ya no funciona: Rendering Falló con un error conocido
- Manteniendo una vista en la parte inferior con la biblioteca de SlidingUpPanel
- Android diseño de diseño - Cómo obtener la altura de la pantalla en xml (layouts)
- No puedo acceder a R.layout.mylayoutname en mi ArrayAdapter personalizado
- Horizontal Scrollview dentro de elemento ListView?
- Cómo desactivar CalendarView en un DatePicker?
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
- ¿Es posible descompilar un archivo .apk de Android?
- Android backup / restore: cómo hacer una copia de seguridad de una base de datos interna?