1. ホーム
  2. android

[解決済み] ImageViewの周囲に不要なパディングがある

2022-05-03 17:19:39

質問

すべてのアクティビティ/ビューにヘッダーグラフィックを含める必要があります。ヘッダーを含むファイルは 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 が)。

(* jpeg、昔のpngのガンマ問題に出くわしたようなので。最初は緑の枠を写真と同じオレンジにして問題を回避したのですが、色が合わなかったのです)。

htc desire/2.2/Build 2.33.163.1 とエミュレータで試しました。また、#android-devの誰かにこの問題を説明しました。彼女は問題を再現できましたが、説明もありませんでした。

update @tehgoose: このコードは全く同じtop+bottom paddedの結果を生成します。

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

解決方法は?

ついに

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

その adjustViewbounds属性 がうまくいきました。

ImageViewがそのdrawableのアスペクト比を維持するためにその境界を調整したい場合、これをtrueに設定します。

躓いた ここで発見 .ありがとうございました。