web-dev-qa-db-ja.com

なぜRelativeLayoutのImageViewの上部と下部に空白が表示されるのですか?

画像にオーバーレイするためにrelativelayoutを使用しています。私がテストしたこれまでのすべての画面サイズ(2.7〜10.1インチ)では、画像の上に常に空白が表示されます。私のIDEでは、relativelayoutが画像の上部と下部に余分なスペースを引き起こしていることが常にわかります。

何故ですか?すべての高さ属性をwrap_contentに設定し、adjustViewBounds属性も追加しました。

注:私の画像はサイズがはるかに大きいことを知っておく必要があります。つまり、ある種のスケーリングがあります。

ヒントをありがとう!

コードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="#FFFFFF"
    Android:orientation="vertical" >

<LinearLayout 
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center_horizontal"
    Android:orientation="vertical" 
    Android:focusable="true"
Android:focusableInTouchMode="true">

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center_horizontal"
    Android:text="@string/bgf"
    Android:textColor="#000000"
    Android:textSize="25sp" />

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" >

    <ImageView 
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"

        Android:adjustViewBounds="true"
        Android:paddingRight="5dp"
        Android:paddingLeft="5dp"
        Android:paddingBottom="5dp"
        Android:layout_gravity="center_horizontal"
        Android:layout_centerVertical="true"
        Android:layout_centerHorizontal="true"
        Android:src="@drawable/cde"
        Android:contentDescription="@string/cde" />

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:adjustViewBounds="true"
        Android:layout_gravity="center_horizontal"
        Android:layout_centerVertical="true"
    Android:layout_centerHorizontal="true"
        Android:src="@drawable/fgh"
        Android:contentDescription="@string/abc" />

</RelativeLayout>


</LinearLayout>
</ScrollView>
16
user2426316

これは、画像のアスペクト比を失うことなく、使用可能な領域に合わせて画像が縮小されるときに発生します。画像が最初に使用可能な幅を占め、元の画像のアスペクト比に従って高さが低くなったため、空白が発生します。

より明確に理解するために、次のことを行うことをお勧めします。

  • 相対レイアウトの背景色をある色に設定します

これで、imageViewとrelativelayoutの間のスペースを理解できます。

デバイスでそれを確認したら、次の変更を行って再試行してください

  • ImageViewで属性scaleType = "fitXY"を設定します。

これにより、画像が拡大縮小され、imageViewで使用可能な領域全体を占めるようになります。 (この場合、元の画像のアスペクト比は失われます)。これで、imageViewが占める領域の量がわかります。

これを行うと、次のように結論付けることができると思います。

  1. 最初の実行で、relativeLayoutの背景を黒に設定した場合、imageViewはギャップを残さずに領域全体を占めるため、表示されません。

  2. 2回目の実行では、アスペクト比は失われましたが、画像は高さと幅全体をカバーします。したがって、これにより、imageViewが幅と高さをカバーし、スペースが残っていないことが確認されます。つまり、画像のアスペクト比、つまり問題が発生します。

まったく別の結果に到達した場合は、お知らせください。解決できます。

編集:

ImageViewに指定したパディングも削除してください

14
pvn

私は正確な問題を抱えていました。かなり苦労した後、これに従って解決しました

** https://stackoverflow.com/a/22144391/240547

そして私のプログラムに以下を追加します

 Android:adjustViewBounds="true"

それは完璧に動作します

49
Sunny Poong