ImageView 주변의 원하지 않는 패딩


142

모든 활동 / 조회에 헤더 그래픽을 포함시켜야합니다. 헤더가있는 파일을 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" />
  (...)

따라서 실제로 시도하면 결과가 (오른쪽) 대신 왼쪽 이미지처럼 보입니다.

녹색 경계에 주목

(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입니다.

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

음의 여백 및 / 또는 패딩 값 수도 또한 작업 - android:layout_margin="-10dp",android:padding="-10dp"
samis

답변:


442

드디어!

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

adjustViewbounds 속성은 속임수를 썼는지 :

ImageView가 드로어 블의 가로 세로 비율을 유지하기 위해 경계를 조정하도록하려면이 값을 true로 설정하십시오.

나는 여기에 걸려 넘어 졌다 . 당신의 도움을 주셔서 감사합니다!


7
나는 같은 문제가 있지만이 솔루션은 효과가 없었습니다.
Marty Miller

4
와우 ... 그 속성이 없으면 화면 밀도에 따라 원하지 않는 패딩이 추가되었으므로 일부 장치에서만 발생했습니다. 내가 소유 한 모든 장치에서 이미지가 잘 보였으므로 친구의 장치에서 이미지를 보았을 때 쓰레기처럼 보였습니다. 감사합니다.
DiscDev

첫 번째 시도를 안드로이드에서 닳은 것을 찾기 위해 버그를 해결하려는 시도에서 전환 한 신들에게 감사드립니다. 나는이 문제가 안드로이드에서 물건을 바꾸는 일부 제조업체에서 시작되었다고 생각하고 다음 버전에서 해결하기 위해 속성을 넣어야합니다.
Ratata Tata

슬프게도 이것은 더 낮은 api, api 16 & 17에는 작동하지 않습니다.
luoser

1
와우 이것은 정확히 내가 찾던 것입니다. 몇 시간 동안 머리를 긁어 내고 레이아웃을 무효화하고 높이 / 너비를 이미지의 높이로 설정하려고했습니다. scaleType이 없어도 완벽하게 작동하는 간단한 솔루션입니다.
CodyEngel

39
android:scaleType="fitXY"

그것은 나를 위해 작동합니다.


3
scaleType="fitXY"이미지의 종횡비를 변경하여 왜곡을 유발합니다. 예를 들어 추상적 배경 이미지와 같은 경우가 있습니다.
stefs

1
android : width 및 android : height를 사용하여 종횡비를 제어했으며 scaleType = "fitXY"는 최소한 내 경험이었던 원하는 종횡비로 imageView를 채웠습니다. 입력 해 주셔서 감사합니다.
Badr

작동하지만 이미지가 예쁘고 불균형하며 잘립니다
최봉재

1
정확히는 아니지만 android : scaleType = "fitEnd"는 마술처럼 작동했습니다.
TheLibrarian

나는 조합을 발견 android:adjustViewBounds="true"하고 android:scaleType="fitXY"내 레이아웃에 ImageViews를 정렬하기 위해 필요한 것이었다. 이미지가 픽셀 하나 또는 두 개 (고해상도 디스플레이에서는 매우 작음)로 꺼져있었습니다 adjustViewBounds. 를 추가하면 scaleType뷰 경계가 조정 된 후 이미지의 최종 크기를 강제로 조정하여 이미지가 새 범위의 전체 크기로 강제 조정됩니다.
Jeff Lockhart

3

이미지 종횡비와 관련이 있습니다. 기본적으로 시스템은 이미지 소스의 원래 종횡비를 유지합니다. 대부분의 경우 레이아웃에 지정된 레이아웃이나 치수와 정확히 일치하지 않습니다. 따라서,

  1. 지정된 레이아웃에 맞게 이미지 크기를 변경하거나
  2. android:scaleType이미지를 맞추는 데 사용 합니다. 예를 들어,android:scaleType="fitXY"

3

안드로이드가 원래 종횡비를 얻으려고 시도하기 때문에 추가 패딩이 자동 생성됩니다. 아래에서 시도하십시오

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

0

당신이 줄 수있을 수 있습니다 specific height to imageView say 50dp or 40dpadjust image to make green borderdissappear.

예 : android:layout_height="40dp"


layout_width = "480px"및 layout_height = "64px"를 설정하면 원하는 결과를 얻을 수 있지만 픽셀은 그리 실용적이지 않습니다. 나는 그것이 dp로 어떻게 번역되는지 이해하지 못한다.
stefs

픽셀처럼 dp를 사용해야합니다. 그것이 전부입니다. 독립 픽셀을 표시합니다. 그러나 작동합니다.
Udaykiran

dp / dip는 밀도 독립 픽셀을 의미합니다. 내가 이해하는 한, 그것은 다른 밀도를 다루지 만 (물론) 다른 화면 크기는 아닙니다. 내가 원하는 것은 이미지가 100 % 화면 너비로 조정되고 비율이 유지되도록 높이를 유지하는 것입니다.
stefs

0
android:layout_height="wrap_content"

"fill_parent"로 변경해야합니다

프레임 레이아웃을 채우는 데 적합한 비율이되도록 이미지의 크기를 조정해야 할 수도 있습니다.

왜 거기에 프레임 레이아웃이 필요한지 이해하지 못합니다. 그것이 없으면 이미지는 어쨌든 화면을 채울 것입니다.

편집 : 예, 죄송합니다 .xml은 이미지 뷰의 높이입니다.


1
추가 할 유일한 것은 그가의 레이아웃 높이를 설정해야한다는 ImageView
것인데

주변 레이아웃없이 시도했지만 아무것도 변경하지 않았습니다. 또한 현재 이미지는 단지 자리 표시 자입니다-곧 추가 요소가 있습니다 (주변 레이아웃을 정당화). 이미지가 화면과 일치하지 않기를 원합니다. 맨 위쪽에 있습니다.
stefs

이미지의 상단과 하단에 빈 공간이 있는지 다시 확인하십시오. 그렇지 않으면 android : scaleType = ""을 사용하여 imageview 객체의 크기를 조정하십시오. 당신이 찾고있는 것에 맞는 것이 있어야합니다.
NotACleverMan


-1

더 잘 보이게하려면 imageview 주위에 모양을 제공해야합니다.

여기 내가 사용한 것 :

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


2
우와! 이미 모양 (탭 배경의 경우)으로 작업했지만 솔직히 말해서 어떻게 적용 해야하는지 이해할 수 없습니다.
stefs

@Schnalle : 두 개의 shapes.xml 파일과 하나의 selector.xml을 만듭니다. 이미지 배경을 selector.xml 파일로 적용하십시오. 선택기 파일에서 포커스 / 선택 및 정상 상태에 대한 두 가지 상태를 제공합니다.
Zoombie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.