2010-11-30 8 views
16

¿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?¿Cómo envolver las vistas de contenido en lugar de fondo dibujable?

<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 adquiere el mismo tamaño que la imagen de fondo. ¿Cómo puedo hacer que mi distribución lineal asuma el mismo tamaño que la vista de texto?

Respuesta

0

Si su imagen se presta a convertirse en una imagen escalable de 9 parches, hacerlo haría que el fondo escalara alrededor de TextView.

+0

Sí, desafortunadamente, mi imagen no es de mosaico, y no es adecuada para 9-patch. – Petrus

+0

No estoy seguro de que esto sea correcto ... Sigo viendo este mismo problema al usar 9 parches. Los 9 parches se expandirán pero no parecen encogerse. – greg7gkb

3

Puede crear un FrameLayout y poner un ImageView y su LinearLayout allí. Por lo tanto, podrás configurar el diseño de tu imagen de fondo.

+2

En ese ImageView, configuré tanto el ancho como el alto para match_parent, Scale Tpye para fitXY y habilité adjustViewBounds. ¡Trabajos! – sulai

0

Creo que la mejor solución aquí es establecer android: clipToPadding = "true". Lo que hace es excluir el relleno para el diseño principal y envuelve su diseño a sus hijos.

18

Bien, este hilo es un poco viejo, pero tengo una solución que alguien podría encontrarle útil algún día. Creo que Android tiene problemas para reducir grandes imágenes, por lo que el tamaño de LinearLayout termina siendo golpeado por el mapa de bits dibujable en segundo plano, y el ImageView termina forzando el tamaño del contenedor principal.

A menos que utilice una disposición relativa. Puede hacer que ImageView sea relativo a la posición de LinearLayout, incluso cuando ImageView esté detrás del diseño en el elemento principal. Mi solución se parece a 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> 

He intentado esto en la parte superior de los tamaños de pantalla y las versiones del sistema operativo, parece funcionar muy bien. Tenga en cuenta que el relleno en LinearLayout es un truco para hacer espacio para un borde sombreado en el gráfico de la imagen de fondo. LinearLayout no necesita ningún posicionamiento relativo porque se supone arriba a la izquierda.

+0

Probé su código ... pero comprime el tamaño de la imagen –

+0

Esta fue la ÚNICA solución que funcionó después de horas de búsqueda. Gracias. – wapples

+0

dependiendo de sus intenciones para el fondo, sin embargo, podría ser importante usar 'scaleType =" centerCrop "' en lugar de 'fitXY'. fitXY ampliará/reducirá la imagen para que coincida exactamente con el tamaño de la imagen resultante, sin importar cuán alto o delgado sea. 'centerCrop' escalará la imagen para que encaje dentro de las dimensiones de la vista de la imagen, pero * guardará la relación de aspecto *, si eso es importante para usted. – mix3d

1

Esto sucede porque la vista de Android calcula su tamaño mínimo en función de su tamaño de fondo dibujable.

Compruebe my answer here en esta otra publicación que cubre el mismo problema que le ayudará a lograr su configuración de diseño.

Cuestiones relacionadas