Нежелательные отступы вокруг ImageView - PullRequest
138 голосов
/ 29 апреля 2011

Мне нужно включить заголовок во все мои действия / просмотры. Файл с заголовком называется 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) Эта оранжевая часть является изображением / изображением, о котором идет речь
(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>

Ответы [ 8 ]

424 голосов
/ 02 мая 2011

наконец!

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

атрибут AdjustViewbounds добился цели:

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

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

37 голосов
/ 24 октября 2014
android:scaleType="fitXY"

У меня работает.

3 голосов
/ 03 сентября 2014

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

  1. Либо измените размер изображения в соответствии с указанным макетом, либо
  2. Используйте android:scaleType, чтобы подогнать изображение. Например, вы можете указать android:scaleType="fitXY"
0 голосов
/ 16 января 2019

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

scaletype = "fitCenter"
android:adjustViewBounds="true"
android:layout_height="wrap_content"
0 голосов
/ 19 октября 2018

используйте этот android: scaleType = "fitXY" в imageview xml

0 голосов
/ 29 апреля 2011

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

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

<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" />

0 голосов
/ 29 апреля 2011

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

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

0 голосов
/ 29 апреля 2011
android:layout_height="wrap_content"

Вам необходимо изменить его на "fill_parent"

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

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

РЕДАКТИРОВАТЬ: да, извините, xml - это высота для просмотра изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...