Нежелательная прокладка вокруг ImageView

Мне нужно включить заголовок во все мои действия/представления. Файл с заголовком называется header.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content"
  android:background="#0000FF" 
  android:padding="0dip">

  <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/header"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="0dip"
    android:layout_marginTop="0dip"
    android:layout_marginBottom="0dip"
    android:padding="0dip"
    android:paddingTop="0dip"
    android:paddingBottom="0dip"
    android:layout_gravity="fill"
    android:background="#00FF00"
    />
</FrameLayout>

Обратите внимание на android:background="#00FF00" (зеленый), это просто визуализация целей.

Я включаю их в свои взгляды так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  style="@style/white_background">

  <include layout="@layout/header" />
  (...)

Итак, когда я на самом деле это пробую, результат будет похож на левое изображение, а не на то, как оно должно выглядеть (справа):

note the green border

(1) Это - оранжевая - часть является изображением /ImageView в вопросе
(2) Нелюбимая зеленая граница. примечание: обычно зеленая область будет прозрачной - она только зеленая, потому что я установил background.

Обратите внимание на зеленую рамку вокруг изображения вверху; Это часть ImageView, и я просто не могу понять, почему он там есть и как я могу от него избавиться. Он устанавливает все отступы и поля на 0 (но результат тот же, когда я их опускаю). Изображение в формате 480x64px jpeg *, и я поместил его в res/drawable (но не в один из drawable-Xdpi).

(* jpeg, потому что кажется, что я наткнулся на старую проблему png-гаммы - сначала я обошел проблему, сделав зеленую рамку такой же оранжевой, как на картинке, и цвета не совпадали.)

Я попробовал это на моем htc desire/2.2/Build 2.33.163.1 и на эмуляторе. Также я описал проблему кому-то в # android-dev; Она могла воспроизвести проблему, но также не имела объяснения. Цель сборки - 1.6.

update @tehgoose: этот код дает точно такой же результат + верх + низ.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  style="@style/white_background">

  <!-- <include layout="@layout/header" />  -->

  <ImageView
    android:src="@drawable/header"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#00FF00"
    android:layout_weight="0"
    />

  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dip"
    android:layout_weight="1">

    (... rest of the elements)

  </LinearLayout>
</LinearLayout>

Ответ 1

наконец!

<ImageView
  (...)
  android:adjustViewBounds="true" />

атрибут adjustViewbounds сделал трюк:

Установите для этого значение значение true, если вы хотите, чтобы ImageView отрегулировал свои границы, чтобы сохранить соотношение сторон его вытягиваемого.

i наткнулся на здесь. спасибо за вашу помощь!

Ответ 2

android:scaleType="fitXY"

Это работает для меня.

Ответ 3

Он связан с соотношением сторон изображения. По умолчанию система сохраняет исходное соотношение сторон изображения. Который в большинстве случаев точно не соответствует макету или размерам, указанным в макете. Следовательно,

  • Либо измените размер изображения, чтобы он соответствовал указанному макету, либо
  • Используйте android:scaleType для соответствия изображению. Например, вы можете указать android:scaleType="fitXY"

Ответ 4

android:layout_height="wrap_content"

Вам нужно изменить его на "fill_parent"

Вам также может понадобиться масштабировать изображение, чтобы оно было правильным соотношением, чтобы заполнить рамку, в которой она находится.

Я не понимаю, зачем вам вообще нужен кадр. Без этого ваше изображение будет просто заполнять экран в любом случае.

EDIT: да, извините, xml - это высота для изображения.

Ответ 5

Может быть, вы можете дать specific height to imageView say 50dp or 40dp и adjust image to make green border dissappear.

Например: android:layout_height="40dp"

Ответ 6

используйте этот android: scaleType = "fitXY" в xml изображения

Ответ 7

это не набивка. это как автоматически сгенерированное поле, так как андроид будет пытаться получить оригинальное соотношение сторон. пожалуйста попробуйте ниже

scaletype = "fitCenter"
android:layout_height="wrap_content"

Ответ 8

Вам нужно предоставить форму вокруг изображения, чтобы лучше выглядеть.

Вот что я использовал:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--<gradient android:startColor="#FFFFFF" android:endColor="#969696"

    android:angle="270">
-->
<gradient android:startColor="#FFFFFF" android:endColor="#FFFFFF"

    android:angle="270">
</gradient>
    <stroke android:width="2dp" android:color="@color/graycolor" />
<corners android:radius="2dp" />
<padding android:left="5dp" android:top="5dp" android:right="5dp"
    android:bottom="5dp" />