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)これ-オレンジ-部分は問題の画像/ ImageViewです
(2)愛されていない緑の境界線。注:通常、緑の領域は透明になります-を設定したので、緑の領域のみが表示されますbackground

上部の画像の周りの緑の境界線に注意してください。それはImageViewの一部であり、なぜそこにあるのか、どうやってそれを取り除くことができるのか理解できません。すべてのパディングとマージンを0に設定します(ただし、省略した場合の結果は同じです)。画像は480x64px jpeg *であり、res / drawableに配置しました(drawable-Xdpiただし、1つではありません)。

(* 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 2012

神様に感謝します。最初の試みは、Androidの摩耗したものを見つけるためにバグを解決する試みから切り替えます。この問題は一部のメーカーがAndroidからのものを変更したことから始まり、次のバージョンではそれを解決するためのプロパティを設定する必要があると思います。
Ratata Tata、2015

悲しいことに、これは、少なくとも下位のAPI、API 16および17では機能しません。
luoser

1
これはまさに私が探していたものです。数時間頭をひっかいていただけで、レイアウトを無効にして高さ/幅を画像に設定することさえしていました。scaleTypeを必要とせずに完全に機能するこのような単純なソリューション。
CodyEngel 2017

39
android:scaleType="fitXY"

わたしにはできる。


3
scaleType="fitXY"ただし、画像の縦横比が変化し、歪みが発生します。これは、たとえば抽象的な背景画像の場合など、許容できる場合があります。
2014年

1
私はandroid:widthとandroid:heightを使用してアスペクト比を制御しましたが、scaleType = "fitXY"はimageViewを希望のアスペクト比で埋めてくれました。ご入力いただきありがとうございます。
Badr

それは機能しますが、画像はかわいらしく、不均衡で、トリミングされています
최봉재2016

1
正確ではありませんが、android:scaleType = "fitEnd"は魔法のように機能しました。
TheLibrarian 2017年

私はの組み合わせを発見したandroid:adjustViewBounds="true"android:scaleType="fitXY"私は私のレイアウトでImageViewsを揃えるために必要なものでした。画像は、1ピクセルまたは2ピクセル(高解像度ディスプレイでは非常に小さい)だけずれていましたadjustViewBounds。を追加するscaleTypeと、ビューの境界が調整された後に画像の最終的なスケーリングが強制的に行われ、画像が新しい境界のフルサイズに強制的にスケーリングされます。
ジェフロックハート

3

それは画像のアスペクト比と関係があります。デフォルトでは、システムは画像ソースの元のアスペクト比を維持します。ほとんどの場合、これはレイアウトまたはレイアウトで指定された寸法と正確に一致しません。したがって、

  1. 指定したレイアウトに合わせて画像のサイズを変更するか、
  2. android:scaleType画像に合わせるために使用します。たとえば、次のように指定できます。android:scaleType="fitXY"

3

Androidは元のアスペクト比を取得しようとするため、これらの余分なパディングは自動生成されます。以下をお試しください

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

0

与えspecific height to imageView say 50dp or 40dpたりadjust image to make green border消したりできるかもしれません。

例えば: android:layout_height="40dp"


layout_width = "480px"とlayout_height = "64px"を設定すると、希望する結果が得られますが、ピクセルはあまり実用的ではありません。正直なところ、それがdpにどのように変換されるのか理解できません。
stefs

ピクセルと同じようにdpを使用する必要があります。それだけです。独立したピクセルを表示します。しかし、それは機能します。
ウダイキラン2011

dp / dipは、密度非依存ピクセルを意味します。私が理解している限り、それはさまざまな密度をカバーしていますが、(もちろん)さまざまな画面サイズではありません。必要なのは、画像を100%の画面幅に拡大縮小し、高さをそのままにして、縦横比を維持することです。
stefs

0
android:layout_height="wrap_content"

「fill_parent」に変更する必要があります

また、画像のフレームレイアウトを埋めるのに適切な比率になるように、画像を拡大縮小する必要がある場合もあります。

フレームレイアウトが必要な理由がまったくわかりません。それがなければ、あなたの画像はとにかく画面いっぱいに表示されます。

編集:はい、申し訳ありませんが、xmlはimageviewの高さです。


1
追加する唯一のことは、彼がのレイアウトの高さを設定する必要があるということですImageView、それはあなたの答えではそれほど明白ではありません:)
ernazm

私も周りのレイアウトなしで試してみましたが、何も変わりません。また、現在の画像は単なるプレースホルダーです-すぐに追加の要素があります(周囲のレイアウトを正当化します)。画像を画面と一致させたくありません。画面の上部に配置します。
stefs

画像の上部と下部に空白があるかどうかを再確認してください。そうでない場合は、android:scaleType = ""を使用してimageviewオブジェクトのスケーリングを試してください。あなたが探しているものに合うものがあるはずです。
NotACleverMan 2011


-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:2つのshapes.xmlファイルと1つのselector.xmlを作成します。画像の背景をselector.xmlファイルとして適用します。セレクターファイルでは、フォーカス/選択状態と通常の状態の2つの状態を提供します。
ズービー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.