Beim Aufrufen von setCompoundDrawables() wird das Compound Drawable nicht angezeigt

Lesezeit: 3 Minuten

Benutzer-Avatar
Jägerp

Nachdem ich angerufen habe setCompoundDrawables -Methode wird das zusammengesetzte Drawable nicht angezeigt.

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);

Irgendwelche Gedanken?

  • Wie in den Antworten unten angegeben, ist die Variante des genannten Verfahrens (..)WithIntrinsicBounds muss angerufen werden. Als Randnotiz, padding für das Compound Drawable gesetzt werden nach dieser Aufruf, um eine Wirkung zu erzielen

    – Dr1Ku

    27. Juni 2012 um 16:17 Uhr


  • Das dokumentieren sagt: Die Drawables muss man schon gehabt haben setBounds(Rect) genannt.

    Benutzer1521536

    15. Dezember 2012 um 10:44 Uhr


  • Hi Hunterp, habe dich gerade im Café (Angel) getroffen, jetzt, da ich weiß, dass du weißt, was Android Drawables sind (und vielleicht hast du bei der Arbeit mit vielen von ihnen Fehler aufgrund von Speicherfehlern getroffen), kann ich dir etwas über einige davon erzählen Die Projekte, an denen ich mitgearbeitet habe, mussten sich mit diesem Problem befassen github.com/JakeWharton/DiskLruCache (mit dem ich zusammengearbeitet habe, um Android-freundlicher zu machen), das von Picasso verwendet wird (github.com/square/picasso)

    – Gubatron

    7. August 2013 um 19:33 Uhr

  • @Dr1Ku Eigentlich habe ich es schon mal und es funktioniert trotzdem.

    – Sotti

    6. März 2014 um 22:21 Uhr

  • Siehe diesen Link stackoverflow.com/a/71966649/12272687

    – Mori

    22. April um 9:43 Uhr

Benutzer-Avatar
Jägerp

Ich musste verwenden setCompoundDrawablesWithIntrinsicBounds.

  • benötigt api 17, also könnte Drawable.setBounds() besser sein

    – Benutzer1324936

    1. Januar 2014 um 15:25 Uhr


  • vielen Dank .. das funktioniert bei mir .. darf ich wissen, was der Unterschied zwischen diesen beiden ist?

    – Arundas KV

    6. Juni 2014 um 7:13 Uhr

  • @user1324936 Die ‘relative’ Version erfordert API 17, andere können mit früheren Versionen verwendet werden

    – Milosmen

    26. März 2015 um 14:47 Uhr

  • @ user1324936 setCompoundDrawablesWithIntrinsicBounds wurde hinzugefügt API-Level 3

    – Greg Ennis

    1. April 2015 um 21:47 Uhr


  • SetcCompoundDrawable ducommentation: Legt fest, dass Drawables (falls vorhanden) links, über, rechts und unter dem Text angezeigt werden. Verwenden Sie null, wenn Sie dort kein Drawable haben möchten. Die Drawables müssen bereits setBounds(Rect) aufgerufen haben. setBounds() wird auf Ihren drawables nicht aufgerufen.

    – Mahendra Chhimwal

    8. August 2017 um 10:52 Uhr

Benutzer-Avatar
arische Bahmani

Verwenden Sie dies (ich habe es getestet). Es funktioniert gut

Drawable image = context.getResources().getDrawable( R.drawable.ic_action );
int h = image.getIntrinsicHeight(); 
int w = image.getIntrinsicWidth();   
image.setBounds( 0, 0, w, h );
button.setCompoundDrawables( image, null, null, null );

  • Dies ist nützlich, wenn auf APIs unter 17 abgezielt wird, da EditText#setCompoundDrawablesWithIntrinsicBounds erfordert mindestens API 17.

    – Krøllebølle

    21. Februar 2016 um 12:49 Uhr

  • Kannst du dafür eine Quelle angeben? Alle Unterlagen, die ich gesehen habe, weisen darauf hin, dass dies der Fall war verfügbar seit API 1.

    – Kurifu

    18. Oktober 2016 um 22:58 Uhr


Das Bild ist leer, weil es keine festgelegten Grenzen hat. Sie dürfen verwenden setCompoundDrawables() aber bevor Sie die Grenzen des Bildes angeben sollten, verwenden Sie Drawable.setBounds() Methode

  • Beste Antwort, weil Sie tatsächlich begründen, warum setBounds wichtig ist.

    – Andy

    10. Dezember 2017 um 16:05 Uhr

  • @Andy Genau, hasse diese Top-Antworten mit 800 Stimmen, die einfach eine Codezeile ohne Worte kopieren und einfügen

    – Großer Stuhl

    14. April 2019 um 8:53 Uhr

Benutzer-Avatar
Andreas

Beispiel nach oben gesetzt:

view.setCompoundDrawablesWithIntrinsicBounds(
    null,
    getResources().getDrawable(R.drawable.some_img),
    null,
    null
);

Reihenfolge der Argumente: (links, oben, rechts, unten)

Nochmal etwas einfacher:

Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );

Benutzer-Avatar
Asad Ali Choudhry

Das Bild wird nicht angezeigt, da Sie die Grenzen nicht angegeben haben, daher haben Sie hier 2 Optionen.

1. Methode

Verwenden setCompoundDrawablesWithIntrinsicBounds Methode, wie unten gezeigt

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);

2. Methode

Sie können Begrenzungen auf das Drawable anwenden, bevor Sie es auf die TextView anwenden, wie unten gezeigt

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

Das ist es.

Benutzer-Avatar
mmBs

Es ist in API 22 veraltet.

Dieser Code ist nützlich für mich:

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.wen, null);
drawable.setBounds(0, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);

1351860cookie-checkBeim Aufrufen von setCompoundDrawables() wird das Compound Drawable nicht angezeigt

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

Privacy policy