web-dev-qa-db-ger.com

Android-Erntehintergrund

Ich habe einen LinearLayoutname__, wobei die Breite auf fill_parent und die Höhe auf wrap_content gesetzt ist. Jetzt möchte ich ihm einen Hintergrund aus einer PNG-Datei geben, aber auf traditionelle Weise bewirkt, dass LinearLayoutdie Größe ändert, um den gesamten Hintergrund anzuzeigen, anstatt den zusätzlichen Teil zuzuschneiden.

Wie kann ich den Hintergrund von LinearLayoutso einstellen, dass die Größe nicht geändert wird?

Vielen Dank

28
Sebastian Nowak

Es scheint, dass dies nur mit der Variable ImageView und dem entsprechenden Parameter scaleType erreichbar ist. Eine schnelle Problemumgehung besteht darin, FrameLayout zu verwenden und die ImageView unter einem anderen Layout mit transparentem Hintergrund abzulegen.

Code:

<FrameLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <ImageView
        Android:id="@+id/imageView1"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:scaleType="centerCrop"
        Android:src="@drawable/background" />

</FrameLayout>
30
Sebastian Nowak

Das Standardverhalten von Hintergrundbitmaps besteht darin, den Container vollständig zu füllen und bei Bedarf die horizontale und vertikale Größe des Containers zu vergrößern. Die Lösung besteht darin, eine anzeigbare Bitmap-Ressource zu erstellen und die Schwerkraft zu ändern. 

Überprüfen Sie den folgenden Link und suchen Sie nach den möglichen Schwerkraftwerten. Ihre Ansicht sollte dann nur auf die zu zeichnende Ressource verweisen und Sie sollten in Ordnung sein.

http://developer.Android.com/guide/topics/resources/drawable-resource.html#Bitmap

7

Ich habe dieses Problem gelöst, indem ich LinearLayout subclassing und den onMeasure(int,int)-Callback überschrieben und dann das Layout-XML aktualisiert habe, um meinen neuen Layouttyp zu verwenden. Ich kann diesen exakten Code nicht veröffentlichen, aber ich habe die super.onMeasure(int,int)-Implementierung aufgerufen und überprüft, ob die gemessene Höhe als genaue Höhe meines Hintergrundbilds zurückkehrt. Wenn ja, greife ich die gemessene Höhe aller untergeordneten Ansichten, berechne dann einen neuen Höhenwert und leite ihn an setMeasuredDimension(int,int).

1
Barend