android - running - ¿Cómo envolver las vistas de contenido en lugar de dibujar el fondo?
background android studio (5)
¿Cómo puedo obtener un LinearLayout (o cualquier otro ViewGroup) para asumir el tamaño de sus vistas secundarias en lugar de asumir el tamaño de la imagen de fondo?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/large_image300x300pix">
<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello world!"/>
</LinearLayout>
El diseño lineal se convierte en el mismo tamaño que la imagen de fondo. ¿Cómo puedo hacer que mi diseño lineal tenga el mismo tamaño que la vista de texto?
Creo que la mejor solución aquí es configurar android: clipToPadding = "true". Lo que esto hace es excluir el relleno del diseño principal y envuelve su diseño a sus hijos.
Esto sucede porque la vista de Android calcula su tamaño mínimo en función de su tamaño dibujable de fondo.
Verifique mi respuesta aquí en esta otra publicación que cubre el mismo problema que le ayudará a lograr su configuración de diseño.
OK, entonces este hilo es un poco viejo, pero tengo una solución que alguien podría encontrar útil algún día. Creo que Android tiene problemas para reducir imágenes grandes, por lo que el tamaño de LinearLayout termina siendo golpeado por el mapa de bits dibujable de fondo, y el ImageView termina forzando el tamaño del contenedor principal.
A menos que uses un diseño relativo. Puede hacer que ImageView se relacione con la posición de LinearLayout, incluso cuando ImageView está detrás del diseño en el elemento primario. Mi solución se ve algo como esto:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:src="@drawable/activation_popup"
android:scaleType="fitXY"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_alignTop="@+id/activation_layout"
android:layout_alignBottom="@id/activation_layout"
android:layout_alignLeft="@id/activation_layout"
android:layout_alignRight="@id/activation_layout"
android:contentDescription="@string/act_code_label" />
<LinearLayout
android:id="@id/activation_layout"
android:clipToPadding="true"
android:padding="25dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- LinearLayout wraps a bunch of smallish views here -->
</LinearLayout>
</RelativeLayout>
Intenté esto en una parte superior de tamaños de pantalla y versiones de sistema operativo, parece funcionar muy bien. Tenga en cuenta que el relleno en el LinearLayout es un truco para hacer espacio para un borde sombreado en el gráfico de la imagen de fondo. El LinearLayout no necesita ningún posicionamiento relativo porque se asume la parte superior izquierda.
Puede crear un FrameLayout
y colocar un ImageView
y su LinearLayout
allí. Así podrás configurar el diseño de tu imagen de fondo.
Si su imagen se presta para convertirse en una imagen escalable de 9 parches, hacer eso haría que el fondo se escale alrededor de TextView.