2011-03-23 21 views
15

Estoy tratando de colocar en una sola fila el EditText con el ImageView a la izquierda. Pero no puedo hacer que la imagen se escale correctamente para que coincida con la altura de la entrada de texto.ImageView: adjustViewBounds no funciona con layout_height = "fill_parent"?

El diseño es simple:

<LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:id="@+id/icon" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:adjustViewBounds="true" 
      android:scaleType="fitStart" 
      android:background="#f00" 
      android:src="@drawable/icon" /> 
     <EditText 
      android:id="@+id/text" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

(I destacó fondo de la imagen por el color rojo para ver el espacio real asignado por ImageView)


Si se especifica la altura exacta para ImageView:

  android:layout_height="48dp" 

luego obtengo la visión más cercana de lo que necesito d: enter image description here

Pero no sé la altura exacta de EditText, por lo que no se puede especificar para ImageView aquí.


Cuando se especifica la altura de ImageView para llenar su matriz (para que coincida con `` altura EditText`):

  android:layout_height="fill_parent" 

en cuando me siento inesperada margen adicional entre la entrada de imagen y el texto: enter image description here

En realidad, en este caso, el ancho ImageView es igual al ancho de la imagen sin escala, mientras que la imagen se ha escalado.


Es el similar a imagen mostrada a continuación si especifico layout_height a 48dp y establecer adjustViewBounds a false:

  android:layout_height="48dp" 
      android:adjustViewBounds="false" 

enter image description here


Entonces, la pregunta aquí es: ¿cómo definir el diseño correctamente para escalar la imagen para que coincida con la altura de entrada de edición y en el mismo tiempo para tener ancho de ImageView para reducir el ancho de la imagen a escala? En otras palabras, ¿cómo deshacerse de este espacio extra?

+0

intente usar android: layout_marginBottom = "10dip" para imageview –

+0

@JSE ¿Cómo ayudaría? Obtendré una imagen más pequeña pero con el mismo espacio extra alrededor. – GrAnd

+0

Pruebe usar scaleType = "fitXY" y height = "fill_parent" para ImageView. – Karan

Respuesta

0

también puede poner la gravedad para estar centrado en el diseño lineal

NOTA: que también debe tener diferentes imágenes en dibujables-IPAP/LDPI y mdpi

7

Ésta es un error LinearLayout. Si mira forceUniformHeight en la fuente here. Puede ver que para manejar el tamaño de las vistas secundarias que suministran match_parent como la altura cuando LinearLayout se establece en wrap_content, LinearLayout simula tener una altura absoluta, recalcula la altura del elemento secundario y luego reutiliza el ancho secundario del paso de medida anterior.Básicamente, su imagen es calcular la altura y el ancho sin restricciones y obtener el ancho y la altura predeterminados, y luego tener la altura recalculada pero forzada a usar el ancho anterior. Necesitará proporcionar una altura o anular algunos View onMeasures

Cuestiones relacionadas