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.

Isaac Darlong
quelle

Antworten:

147

Sie müssen die Methode setImageResource () verwenden.

imageButton.setImageResource(R.drawable.eng2);

Prerak Sola
quelle
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 .

Marcin Orlowski
quelle
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)
Tom
quelle
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.

miPlodder
quelle
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)
Maschinenlerner
quelle