Wie kann ich die ImageButton-Eigenschaft der App programmgesteuert festlegen: srcCompat = "@ drawable / pic"?


73

So legen Sie die ImageButtonEigenschaft von fest

app:srcCompat="@drawable/pic"

programmatisch?

So etwas wie myImageButton.setBackgroundResource(R.drawable.eng2);aber das Eigentum von app:srcCompat.

Antworten:



24

Stellen Sie zunächst sicher, dass Sie es AppCompatImageViewnicht regelmäßig zu tun haben ImageView:

AppCompatImageView iv = (AppCompatImageView)findViewById(....);

und dann können Sie tun:

iv.setImageResource(R.drawable.pic);

Weitere öffentliche Methoden finden Sie in den Dokumenten .


1
Ich verwende 'ImageButton' mit 'app: srcCompat = "@ drawable / pic"', aber setze auf 'setImageResource (R.drawable.pic);' funktioniert gut. Vielen Dank
Isaac Darlong

Build-Tools ersetzen wahrscheinlich Klassen "in fly"
snachmsm

Hey Marcin, weißt du, warum wir das Bild programmgesteuert ändern müssen, anstatt den Pfad zwischen App anzugeben: srcCompa = "drawable /"
Vitaliy Terziev

1
Ich möchte zu dieser Antwort hinzufügen, die ich AppCompatImageButtonanstelle von verwenden musste ImageButton.
Zhang

@ Zhang Das wahrscheinlich, weil Sie die Aktivität, bei der die Ansicht aufgeblasen wurde, AppCompatActivity
Andre Romano

2

Die Verwendung setImageResource()sollte die Ressource abwärtskompatibel abrufen, ohne dass weitere Anstrengungen erforderlich sind.

Wenn Sie jedoch setImageDrawable()ImageView / ImageButton verwenden, hilft dies bei keiner Abwärtskompatibilität, und es liegt an Ihnen, ein abwärtskompatibles Zeichenelement bereitzustellen, das z. wenn mit VectorDrawables. Folgendes lädt und setzt ein Drawable so:

val drawable = AppCompatResources.getDrawable(context, resourceId)
image.setImageDrawable(drawable)

1

Ich denke, andere Methoden sind veraltet und würden zum Zeitpunkt des Schreibens nicht funktionieren.

iv_yourImageView.setImageDrawable(getResources().getDrawable(R.drawable.your_drawable));

Das wird funktionieren.


0

Keine der angebotenen Lösungen hat für mich funktioniert. Ich habe eine ImageView verwendet. Schließlich fand ich heraus, dass die Verwendung setBackgroundResource()für mich funktioniert.

view.setBackgroundResource(R.drawable.ic_star_black_18dp)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.