studio programacion para herramientas fundamentos desarrollo con avanzado aplicaciones android xml layout imageview

programacion - ImageView en el diseño XML de Android con layout_height="wrap_content" tiene relleno superior e inferior



manual android studio avanzado (1)

Tengo un LinearLayout vertical que contiene un ImageView y algunos otros diseños y vistas.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/banner_alt" android:src="@drawable/banner_portrait" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/main_search" android:gravity="center" android:textStyle="bold" /> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <Spinner android:id="@+id/search_city_spinner" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:prompt="@string/search_city_prompt" android:entries="@array/search_city_array" /> <Spinner android:id="@+id/search_area_spinner" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:prompt="@string/search_area_prompt" android:entries="@array/search_area_array" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <Spinner android:id="@+id/search_rooms_spinner" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:prompt="@string/search_rooms_prompt" android:entries="@array/search_rooms_array" /> <Spinner android:id="@+id/search_min_spinner" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:prompt="@string/search_min_prompt" android:entries="@array/search_min_array" /> <Spinner android:id="@+id/search_max_spinner" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:prompt="@string/search_max_prompt" android:entries="@array/search_max_array" /> </LinearLayout> <Button android:id="@+id/saearch_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/search_button" android:onClick="searchButton" /> </LinearLayout>

Mi problema es que cuando se muestra la actividad, ImageView tiene un relleno en la parte superior e inferior. Confirmé que es ImageView (al establecer un color de fondo en ImageView).

La imagen es 450x450px. Establecer manualmente la altura a 450px produce el efecto deseado (sin relleno) y establecerlo en 450dp produce el mismo efecto que usar wrap_content.

Parece que Android está tomando la altura de la imagen (450px) y ajustando la altura de ImageView al mismo valor, pero en dp.

¿Alguna idea sobre lo que puedo hacer para arreglar esto? No quiero usar valores absolutos ya que proporcionaré diferentes imágenes para diferentes densidades de pantalla.


Tuve un problema similar y lo resolví usando android:adjustViewBounds="true" en ImageView.

<ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:contentDescription="@string/banner_alt" android:src="@drawable/banner_portrait" />