ich habe
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#FFFF00" />
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
</shape>
<TextView
android:background="@drawable/test"
android:layout_height="45dp"
android:layout_width="100dp"
android:text="Moderate"
/>
Jetzt möchte ich, dass diese Form ihre Farben basierend auf Informationen ändert, die ich von einem Webdienstanruf zurückerhalte. Es könnte also vielleicht gelb oder grün oder rot oder was auch immer sein, abhängig von der Farbe, die ich vom Web-Service-Anruf erhalte.
Wie kann ich die Farbe der Form ändern? Basierend auf diesen Informationen?
View.getBackground()
aGradientDrawable
und nicht a zurückgegeben,ShapeDrawable
wodurch die App zur Laufzeit abstürzt, da beim Versuch, die Referenz abzurufen und die Farbe programmgesteuert festzulegen, eine ungültige Besetzung vorliegt . [Android Shape doc] ( developer.android.com/guide/topics/resources/… ) gibt an: COMPILED RESOURCE DATATYPE: Ressourcenzeiger auf aGradientDrawable
.Antworten:
Sie können es einfach so ändern
quelle
java.lang.ClassCastException: android.graphics.drawable.GradientDrawable cannot be cast to android.graphics.drawable.ShapeDrawable
wenn ich diesen Vorschlag versuche.Für mich stürzte es ab, weil
getBackground
einGradientDrawable
statt ein zurückgegeben wurdeShapeDrawable
.Also habe ich es so modifiziert:
quelle
Dies funktioniert bei mir mit einer anfänglichen XML-Ressource:
Ergebnis der obigen Angaben : http://i.stack.imgur.com/hKUR7.png
quelle
Sie können Ihre eigenen Formen in Java erstellen. Ich habe dies für ein iPhone wie Page Controler gemacht und die Formen in Java gemalt:
hoffe das hilft. Griechischer Fabian
quelle
Vielleicht muss jemand anderes die Farbe im XML ändern, ohne mehrere Drawables zu erstellen, wie ich es brauchte. Machen Sie dann einen Kreis ohne Farbe zeichnbar und geben Sie backgroundTint für die ImageView an.
circle.xml
Und in Ihrem Layout :
Bearbeiten:
Es gibt einen Fehler in Bezug auf diese Methode, der verhindert, dass sie unter Android Lollipop 5.0 (API-Level 21) funktioniert. Wurden aber in neueren Versionen behoben.
quelle
quelle
circle.xml (zeichnbar)
Layout
in Aktivität
quelle
Diese Lösung funktionierte bei mir mit dem Android SDK V19:
quelle
Wenn Sie eine Bildansicht wie diese haben:
Mit diesem Code können Sie die Farbe der Form ändern:
quelle
Meine Form xml:
Meine Aktivität xml:
Meine Aktivität Java:
Ergebnisbild: Ergebnis
quelle
Der einfachste Weg, die Form mit dem Radius zu füllen, ist:
XML:
Java:
quelle
Ich versuche Ronnies Antwort und meine App stürzte ab. Dann überprüfe ich meine zeichnbare XML. Es sieht aus wie das:
. Ich habe es folgendermaßen geändert: (auch Attribute geändert)
Es klappt.
Für diejenigen, die auf das gleiche Problem stoßen.
quelle
drawable_rectangle.xml
Textübersicht
quelle
Sie können dazu einen Bindungsadapter (Kotlin) verwenden . Erstellen Sie eine Bindungsadapterklasse mit dem Namen ChangeShapeColor wie unten
Erstellen Sie eine zeichnbare Form im Ordner res / drawable. Ich habe einen Kreis erstellt
Beziehen Sie sich schließlich auf Ihre Ansicht
quelle