web-dev-qa-db-ja.com

背景画像を拡大縮小してレイアウトのコンテンツをラップする

いくつかのテキストフィールドを含むレイアウトと、アクティビティの上部に表示される背景画像があります。背景画像を拡大縮小してコンテンツをラップしたいと思います(縦横比は気にしません)。ただし、画像はコンテンツよりも大きいため、代わりにレイアウトが背景画像をラップします。ここに私の元のコードがあります:

<RelativeLayout 
    Android:layout_width="fill_parent"
    Android:id="@+id/HeaderList" 
    Android:layout_gravity="top"
    Android:layout_height="wrap_content" 
    Android:background="@drawable/header">
    <TextView 
        Android:layout_height="wrap_content"
        Android:layout_width="wrap_content" 
        Android:id="@+id/NameText"
        Android:text="Jhn Doe" 
        Android:textColor="#FFFFFF"
        Android:textSize="30sp" 
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true" 
        Android:paddingLeft="4dp"
        Android:paddingTop="4dp" 
    />
    <TextView 
        Android:layout_height="wrap_content"
        Android:layout_width="wrap_content" 
        Android:textColor="#FFFFFF"
        Android:layout_alignParentLeft="true"
        Android:id="@+id/HoursText"
        Android:text="170 hours" 
        Android:textSize="23sp"
        Android:layout_below="@+id/NameText" 
        Android:paddingLeft="4dp" 
    />
</RelativeLayout>

他のいくつかの質問を検索した結果、次の2つが見つかりました。

ドローアブルではなくコンテンツビューをラップする方法

Drawableまたは背景画像を拡大縮小しますか?

これに基づいて、背景を表示するIm​​ageViewを備えたFrameLayoutを作成しました。残念ながら、私はまだそれを動作させることができません。背景画像の高さをテキストビューのサイズで縮小/拡大したいのですが、FrameLayoutでは、ImageViewは親のサイズに適合し、親を適合させる方法を見つけることができませんテキストビューレイアウトのサイズ。ここに私の更新されたコードがあります:

<FrameLayout 
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content" >

    <ImageView Android:src="@drawable/header"
        Android:layout_width="fill_parent" 
        Android:scaleType="fitXY"
        Android:layout_height="fill_parent" 
        />
    <RelativeLayout 
        Android:layout_width="fill_parent"
        Android:id="@+id/HeaderList" 
        Android:layout_gravity="top"
        Android:layout_height="wrap_content"
        >
        <TextView 
            Android:layout_height="wrap_content"
            Android:layout_width="wrap_content" 
            Android:id="@+id/NameText"
            Android:text="John Doe" 
            Android:textColor="#FFFFFF"
            Android:textSize="30sp" 
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentTop="true" 
            Android:paddingLeft="4dp"
            Android:paddingTop="4dp" 
            />
        <TextView 
            Android:layout_height="wrap_content"
            Android:layout_width="wrap_content" 
            Android:textColor="#FFFFFF"
            Android:layout_alignParentLeft="true" 
            Android:id="@+id/HoursText"
            Android:text="170 hours" 
            Android:textSize="23sp"
            Android:layout_below="@+id/NameText" 
            Android:paddingLeft="4dp" 
            />
    </RelativeLayout>
</FrameLayout>

レイアウトのコンテンツのサイズに合わせて画像を拡大する最適な方法についての提案はありますか?画像の縦横比は関係ないので、背景を埋めたいだけです。

ありがとう!

39
bjg222

私は同じ問題を抱えていました(私は思う)、そして私が見つけることができた唯一の解決策はこれでした:

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

    <View
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/some_image"
        Android:layout_alignTop="@+id/actual_content"
        Android:layout_alignBottom="@id/actual_content"
        Android:layout_alignLeft="@id/actual_content"
        Android:layout_alignRight="@id/actual_content"
        />

    <LinearLayout
        Android:id="@id/actual_content"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        >

       <!-- more stuff ... -->

    </LinearLayout>

</RelativeLayout>
65
Squatting Bear

このトリックを試すことができますが、

  • FrameLayout(wrapcontent、wrapcontent)
    • ImageView(親と一致、親と一致)//その背景
    • LinearLayout(wrapcontent、wrapcontent)
      • すべてのコンテンツは、この線形レイアウトまたは他の種類の任意の内容に収まります
3
Umair

RealtiveLayoutの操作(必須ではありませんが、FrameLayoutの代わりにAndroid:scaleType = "fitXY"を使用します。textViewsAndroid:id = "@ + id/HeaderList"を含むRealViewLayoutにimageViewを移動し、背景Android:background = "@を設定解除します。このレベルの「ドロアブル/ヘッダー」。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
         Android:id="@+id/principal"
         Android:layout_width="fill_parent"
         Android:layout_height="fill_parent"
         Android:background="@drawable/header" >

     <RelativeLayout 
         Android:layout_width="fill_parent"
         Android:id="@+id/HeaderList" 
         Android:layout_gravity="top"
         Android:layout_height="wrap_content" >  


         <ImageView
             Android:id="@+id/backImg"
             Android:layout_width="fill_parent"
             Android:layout_height="fill_parent"
             Android:layout_centerInParent="true"
             Android:adjustViewBounds="true"
             Android:background="@color/blancotransless"
             Android:src="@drawable/header"
             Android:scaleType="fitXY" >
         </ImageView>

             <TextView 
                 Android:layout_height="wrap_content"
                 Android:layout_width="wrap_content" 
                 Android:id="@+id/NameText"
                 Android:text="John Doe" 
                 Android:textColor="#FFFFFF"
                 Android:textSize="30sp" 
                 Android:layout_alignParentLeft="true"
                 Android:layout_alignParentTop="true" 
                 Android:paddingLeft="4dp"
                 Android:paddingTop="4dp" 
                 />
             <TextView 
                 Android:layout_height="wrap_content"
                 Android:layout_width="wrap_content" 
                 Android:textColor="#FFFFFF"
                 Android:layout_alignParentLeft="true" 
                 Android:id="@+id/HoursText"
                 Android:text="170 hours" 
                 Android:textSize="23sp"
                 Android:layout_below="@+id/NameText" 
                 Android:paddingLeft="4dp" 
                 />
         </RelativeLayout> 
      </RelativeLayout>

多かれ少なかれ動作するはずです!

2
Zeus Monolitics

描画可能なXMLを作成します(mybackground.xmlなど)

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/header"
    Android:gravity="fill" />

次に、最初のコードスニペットのRelativeLayoutで使用します

Android:background="@drawable/mybackground"
1
yoah

過去にこれと似たようなことをしたことがあると思います。画像ビューで重力設定を試してみてください。

0
jsonfry

試したことはありませんが、onCreateで背景画像を動的に設定した場合、動作する可能性があります。レイアウトのサイズはすでに設定されているはずです。

0
Skyler Lauren