Нежелательная прокладка вокруг 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" />