studio programacion móviles fondo desarrollo curso como color cambiar aplicaciones android background padding android-linearlayout

móviles - manual de programacion android pdf



¿Cambiar el fondo también cambia el relleno de un LinearLayout? (3)

Este es el comportamiento predeterminado al cambiar el Drawable fondo en una View . Según Romain Guy, uno de los desarrolladores de Android, "la razón por la que la configuración de una imagen restablece el relleno es porque las imágenes de 9 parches pueden codificar el relleno". Ver su respuesta completa en una pregunta similar .

La solución es restablecer el relleno en el código cada vez que cambie el dibujable de fondo.

Tengo el siguiente LinearLayout . Lo que no entiendo es que si configuro el fondo en otra imagen, la información de relleno se restablecerá. ¿Hay alguna manera de prevenir esto?

<LinearLayout android:id="@+id/aPanel" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bkground" android:paddingLeft="15dp" android:paddingRight="15dp"> <!-- some children here --> </LinearLayout>

Veo que la posición de los niños se desplaza cuando cambio el fondo que se LinearLayout dibujar de LinearLayout aPanel .


Puede usar la forma para establecer el fondo con un solo color o imagen y aplicar un relleno como este:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF"/> <corners android:bottomLeftRadius="8dip" android:topLeftRadius="8dip"/> <padding android:bottom="0dip" android:left="0dip" android:right="0dip" android:top="0dip"/> </shape>


This es una pregunta similar.

En resumen, la respuesta sería:

public static void setViewBackgroundWithoutResettingPadding(final View v, final int backgroundResId) { final int paddingBottom = v.getPaddingBottom(), paddingLeft = v.getPaddingLeft(); final int paddingRight = v.getPaddingRight(), paddingTop = v.getPaddingTop(); v.setBackgroundResource(backgroundResId); v.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); }

La razón por la que se restablece el relleno es porque el drawable podría ser un drawable de 9 parches.