wake-up-neo.net

Skalieren Sie das Hintergrundbild, um den Inhalt des Layouts zu umschließen

Ich habe ein Layout, das einige Textfelder enthält und ein Hintergrundbild enthält, das oben in meiner Aktivität angezeigt wird. Ich möchte, dass das Hintergrundbild skaliert wird, um den Inhalt einzuwickeln (das Seitenverhältnis ist nicht wichtig). Das Bild ist jedoch größer als der Inhalt, sodass das Layout stattdessen das Hintergrundbild umgibt. Hier ist mein ursprünglicher Code:

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

Nachdem ich einige andere Fragen durchsucht hatte, fand ich diese beiden:

Wie man Inhaltsansichten einwickelt, anstatt den Hintergrund gezeichnet zu können?

Ein Zeichen- oder Hintergrundbild skalieren?

Basierend darauf habe ich ein FrameLayout mit ImageView erstellt, das den Hintergrund zeigt. Leider kann ich es immer noch nicht schaffen. Ich möchte, dass die Höhe des Hintergrundbilds mit der Größe der Textansichten verkleinert/erweitert wird. Mit FrameLayout passt sich die ImageView-Ansicht jedoch an die Größe des übergeordneten Elements an und ich kann keinen Weg finden, das übergeordnete Element anpassbar zu machen die Größe des Layouts der Textansicht. Hier ist mein aktualisierter Code:

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

Hat jemand Vorschläge, wie man ein Bild am besten an die Größe eines Layouts anpassen kann? Das Seitenverhältnis des Bildes interessiert mich nicht, da es keine Rolle spielt. Ich möchte nur, dass es den Hintergrund ausfüllt.

Vielen Dank!

37
bjg222

Ich hatte das gleiche Problem (glaube ich) und die einzige Lösung, die ich finden konnte, war folgende:

<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>
63
Squatting Bear

Sie können diesen Trick versuchen,

  • FrameLayout (Wrapcontent, Wrapcontent)
    • ImageView (Gleiches übergeordnetes Element, gleiches übergeordnetes Element) // Ihr Hintergrund
    • LinearLayout (Wrapcontent, Wrapcontent)
      • Alle Ihre Inhalte werden in dieses lineare Layout oder in einen beliebigen anderen Typ eingefügt, was immer Sie möchten
3
Umair

Arbeiten Sie mit RealtiveLayout (kein Muss, aber anstelle von FrameLayout und verwenden Sie Android: scaleType = "fitXY". Verschieben Sie das ImageView in RealtiveLayout, das die Textviews Android: id = "@ + id/HeaderList") enthält, und setzen Sie den Hintergrund Android: background = "@ Zeichen/Header "auf dieser Ebene.

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

Mehr oder weniger sollte es funktionieren!

2
Zeus Monolitics

Erstellen Sie eine zeichnungsfähige XML-Datei, beispielsweise 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" />

Dann in deinem RelativeLayout im ersten Code-Snippet verwenden 

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

Ich glaube, ich habe in der Vergangenheit etwas Ähnliches gemacht. Versuchen Sie, mit der Schwerkrafteinstellung in Ihrer Bildansicht zu spielen. Ich denke, einer von ihnen sollte tun, was Sie wollen.

0
jsonfry

Ich habe es nicht ausprobiert, aber wenn Sie das Hintergrundbild für onCreate dynamisch einstellen, könnte dies funktionieren. Die Größe des Layouts sollte bereits festgelegt sein.

0
Skyler Lauren