Android-Layout: Dieses Tag und seine untergeordneten Elemente können durch eins ersetzt werden und ein Verbundziehteil

Lesezeit: 5 Minuten

Benutzer-Avatar
pdilip

Wenn ich das Layout für eine bestimmte XML-Datei ausführe, erhalte ich Folgendes:

 This tag and its children can be replaced by one <TextView/> 
and a compound drawable

Welche Änderung sollte für den folgenden XML-Code vorgenommen werden:

<LinearLayout android:id="@+id/name_layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:background="@drawable/grouplist_single_left_grey_area" >
                <ImageView android:id="@+id/photo_image"
                    android:layout_width="@dimen/thumbnail_width"
                    android:layout_height="@dimen/thumbnail_height"
                    android:paddingBottom="5dip"
                    android:paddingTop="5dip"
                    android:paddingRight="5dip"
                    android:paddingLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:clickable="true"
                    android:focusable="true"
                    android:scaleType="fitCenter"
                    android:src="https://stackoverflow.com/questions/3214424/@*android:drawable/nopicture_thumbnail"
                    android:background="@drawable/photo_highlight" />
                <TextView android:id="@+id/name"
                    android:paddingLeft="5dip"
                    android:layout_weight="1"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
            </LinearLayout>

So sieht es auf dem Bildschirm aus:

Geben Sie hier die Bildbeschreibung ein

Das Kamerasymbol ist die Standardeinstellung. Wenn Sie darauf klicken, hat der Benutzer die Möglichkeit, ein anderes Bild auszuwählen.

  • +1, weil diese Situation komplexer aussieht, als sie mit zusammengesetzten Drawables gehandhabt werden kann. Wenn Sie Romains Antwort nicht akzeptiert hätten, hätten Sie vielleicht eine ausführlichere Antwort erhalten.

    – AlbeyAmakiir

    7. August 2012 um 6:20 Uhr


Um die Antwort von Romain Guy zu erweitern, hier ein Beispiel.

Vor:

<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:layout_marginTop="10dp"  
android:padding="5dp" >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="My Compound Button" />

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="https://stackoverflow.com/questions/3214424/@drawable/my_drawable" />
</LinearLayout>

Nach:

<TextView  
    android:layout_marginTop="10dp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:text="My Compound Button" 
    android:drawableRight="https://stackoverflow.com/questions/3214424/@drawable/my_drawable" android:padding="5dp" />

  • Raffiniert. Aber was ist, wenn ich Eigenschaften für das Drawable festlegen muss, z. B. 60 DIP x 60 DIP?

    – Kyle Clegg

    25. April 2012 um 0:09 Uhr


  • Hey, sieh dir das an, ich musste nur suchen. stackoverflow.com/a/6671544/1224741

    – QED

    8. August 2012 um 1:40 Uhr

  • @KyleClegg, es ist mit einer benutzerdefinierten Bibliothek möglich. Siehe meine Antwort – stackoverflow.com/a/41347470/2308720

    – Oleksandr

    27. Dezember 2016 um 15:01 Uhr

  • Das letzte Commit dieses Projekts war vor drei Jahren, es wird nicht gepflegt, schätze ich.

    – Luciano Brum

    27. Januar 2021 um 12:40 Uhr

Benutzer-Avatar
Romain Guy

Zusammenführen der TextView und die ImageView in eine, indem Sie TextView verwenden setCompoundDrawable*() Methoden oder mit android:drawableLeft.

  • Können Sie mir ein Beispiel nennen, das zeigt, wie das gemacht werden kann? Ich bin mir nicht sicher, wie alle Attribute in der ImageView in android:drawableLeft untergebracht werden können. Vielen Dank

    – pdilip

    9. Juli 2010 um 19:19 Uhr

  • Was ist mit ImageViews-Attributen wie scaleType ?

    – neteinstein

    30. August 2012 um 11:24 Uhr

  • Wie vergrößere ich den Abstand zwischen Bild und Text?

    – Tharaka Nirmana

    9. Oktober 2013 um 7:23 Uhr

  • setCompoundDrawable*() funktioniert nicht, verwenden Sie stattdessen setCompoundDrawablesWithIntrinsicBounds()

    – Kimo_do

    2. November 2013 um 23:40 Uhr

  • @Kimo_do, setCompoundDrawable() wird sich nicht um Ihr Drawable kümmern, so wie es ist, müssen Sie anrufen setBounds darauf (vgl API). Um es einzustellen, können Sie die vorherigen Grenzen mit abrufen TextView.getCompoundDrawables()auf den korrekten Drawable-Index zugreifen und schließlich aufrufen getBounds().

    – Avinash R

    5. Januar 2014 um 20:22 Uhr

Benutzer-Avatar
QED

Ich dachte, ich würde versuchen, auch dafür ein paar zusätzliche Puntos zu bekommen: Sie können mit Padding zwischen dem Bild und dem Text hinzufügen android:drawablePadding. https://stackoverflow.com/a/6671544/1224741

Hinzufügen tools:ignore="UseCompoundDrawables" zu <LinearLayout>.

Benutzer-Avatar
Oleksandr

Manchmal ist ein Austausch möglich ImageView (oder mehrere) und TextView mit einer TextView mit Compound Drawable(s). Es gibt NICHT viele Parameter, die mit nativer API und diesem auf Compound Drawable angewendet werden können TextViewRichDrawable-Bibliothekaber Wenn Sie eine TextView verwalten können, sollten Sie sie auf jeden Fall verwenden, anstatt LinearLayout zu verwenden.

Die Liste der Attribute und Parameter, die auf zusammengesetzte Drawables angewendet werden können:

Größe: (Ja wirklich):

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Some text"
    app:compoundDrawableHeight="24dp"
    app:compoundDrawableWidth="24dp"/>

Eben Vektorressource festlegen als abziehbar:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Some text"
    app:drawableTopVector="@drawable/some_vector_drawble"
    app:drawableEndVector="@drawable/another_vector_drawable" />

Drawable’s Padding mit nativer API android:drawablePadding -> Verknüpfung

Hier ist ein Beispiel:

textView Rich drawable

Benutzer-Avatar
Amir Moaaviah

EIN LinearLayout die ein enthält ImageView und ein TextView kann effizienter als zusammengesetztes Drawable gehandhabt werden (eine einzelne
TextViewVerwendung der drawableTop, drawableLeft, drawableRight
und/oder drawableBottom Attribute, um ein oder mehrere Bilder neben dem Text zu zeichnen).

Wenn die beiden Widgets mit Rändern gegeneinander versetzt sind, kann dieser durch einen ersetzt werden drawablePadding Attribut.

Es gibt einen Lint-Quickfix, um diese Konvertierung im Eclipse-Plugin durchzuführen.

Von: Offizielle Android-API-Dokumentation!

Benutzer-Avatar
Vikas

Wenn ich den obigen Code befolgt habe, wird der Text in der TextView nicht richtig eingestellt. Sie müssen die Schwerkraft auf center|start setzen, um das zu erreichen, was in der gestellten Frage gezeigt wird.

Die Textansicht sieht so aus:

   <TextView
        android:id="@+id/export_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:drawableLeft="@drawable/up_arrow"
        android:drawableStart="@drawable/up_arrow"
        android:gravity="center|start"
        android:text="....."
        android:textSize="@dimen/font_size15" >
    </TextView>

1335300cookie-checkAndroid-Layout: Dieses Tag und seine untergeordneten Elemente können durch eins ersetzt werden und ein Verbundziehteil

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy