web-dev-qa-db-fra.com

ImageView in Android La mise en page XML avec layout_height = "wrap_content" est complétée en haut et en bas

J'ai un LinearLayout vertical contenant un ImageView et quelques autres dispositions et vues.

<?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>

Mon problème est que, lorsque l'activité est affichée, ImageView a un remplissage en haut et en bas. J'ai confirmé qu'il s'agit de ImageView (en définissant une couleur d'arrière-plan sur ImageView).

L'image est 450x450px. Le réglage manuel de la hauteur à 450px produit l’effet souhaité (pas de remplissage) et son réglage à 450dp produit le même effet que l’utilisation de wrap_content.

Il semble que Android prend la hauteur de l’image (450 pixels) et définit la hauteur du ImageView sur la même valeur, mais en dp.

Des idées sur ce que je peux faire pour résoudre ce problème? Je ne veux pas utiliser de valeurs absolues car je fournirai différentes images pour différentes densités d'écran.

51
gsteinert

J'ai eu un problème similaire et je l'ai résolu en utilisant Android:adjustViewBounds="true" Sur 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" />
132