Ich versuche, die Hintergrundfarbe einer Ansicht festzulegen (in diesem Fall eine Schaltfläche).
Ich benutze diesen Code:
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
Dadurch verschwindet die Schaltfläche vom Bildschirm. Was mache ich falsch und wie kann ich die Hintergrundfarbe in einer Ansicht richtig ändern?
Vielen Dank.
Antworten:
Sie haben Ihren Button transparent gemacht. Das erste Byte ist das Alpha.
Versuchen
v.setBackgroundColor(0xFF00FF00);
quelle
0xff00ff00
, genau das gleiche wie das, was in der Antwort vorgeschlagen hat, es sei denn es auch den Vorteil, dass hat die Menschen lesbare . Die meisten Entwickler würden eine für Menschen lesbare Lösung bevorzugen.Wenn Sie setBackgoundColor aufrufen, werden vorhandene Hintergrundressourcen überschrieben / entfernt, einschließlich Rahmen, Ecken, Auffüllungen usw. Sie möchten lediglich die Farbe der vorhandenen Hintergrundressource ändern ...
Experimentieren Sie mit PorterDuff.Mode. * Für verschiedene Effekte.
quelle
Mehrere Möglichkeiten, dies zu tun ...
Hintergrund auf grün setzen:
Setzen Sie den Hintergrund mit Alpha auf Grün :
Setzen Sie den Hintergrund mit der Konstante Color.GREEN auf Grün:
Setzen Sie den Hintergrund in Colors.xml auf grün
und mit:
und:
oder die länger gewundenen:
und:
quelle
getResources().getColor(...)
wurde veraltet stackoverflow.com/questions/31842983/…v.setBackgroundResource(R.color.myGreen);
bei der Verwendungcolors.xml
invalidate
Aufrufe wurden entfernt, da Sie sehen können, dasssetBackground...
Methoden dies bereits aufrufen.v.setBackgroundColor(0x00FF00);
ist nur ihr Code, von dem sie sagen, dass er nicht funktioniert. Ich würde auch erwarten, dass es transparent ist.Sie können die Hex-Farbe für jede Ressource festlegen mit:
quelle
Der Code setzt die Schaltfläche nicht auf Grün. Stattdessen wird die Schaltfläche vollständig unsichtbar.
Erläuterung: Der Hex-Wert der Farbe ist falsch. Bei einem Alpha-Wert von Null ist die Farbe unsichtbar.
Der richtige Hex-Wert ist
0xFF00FF00
für Grün mit voller Deckkraft. Jeder Alpha-Wert zwischen 00 und FF würde Transparenz verursachen.quelle
Auf irgendeinen
View
? Was Sie haben, ist richtig, obwohl Sie das fallen lassen sollteninvalidate()
Anruf .Einige
Views
haben jedoch bereits Hintergründe. AButton
hat zum Beispiel bereits einen Hintergrund: das Gesicht der Schaltfläche selbst. Dieser Hintergrund ist einStateListDrawable
, den Sie in finden könnenandroid-2.1/data/res/drawable/btn_default.xml
in Ihrer Android SDK-Installation finden. Dies bezieht sich wiederum auf eine Reihe von Bitmap-Bildern mit neun Patches, die in mehreren Dichten verfügbar sind. Sie müssten all das klonen und modifizieren, um Ihre grünen Ziele zu erreichen.Kurz gesagt, es ist besser für Sie, ein anderes UI-Muster zu finden, als zu versuchen, den Hintergrund von a zu ändern
Button
.quelle
Um die erste Farbe festzulegen, die auf dem Bildschirm angezeigt wird, können Sie dies auch in der entsprechenden layout.xml (besseres Design) tun, indem Sie diese Eigenschaft der entsprechenden Ansicht hinzufügen:
quelle
versuchen Sie hinzuzufügen:
quelle
Ich benutze bei API min 16, Ziel 23
quelle
Sie können einfach verwenden:
quelle
quelle
In dieser Frage geht es um das Ändern der Hintergrundfarbe einer Ansicht. In einer der Antworten erklärt die Person, wie die Hintergrundfarbe zur Laufzeit geändert wird. Natürlich werden Sie untersuchen, wie Sie andere Objekte auf dem Bildschirm ändern können. Dies sollte Ihnen jedoch einen guten Einstieg ermöglichen, indem Sie zumindest die Hintergrundfarbe der Ansicht beim Klicken auf die Schaltfläche ändern können.
quelle
Wenn Sie mit Android 6 angeben, verwenden Sie ContextCompact
quelle
Sie können einfach verwenden:
quelle
In Kotlin könnte man das so machen:
Wo
getColorCompat()
ist eine Erweiterungsfunktion:quelle
Fügt dem vorherigen Farbwert Farbe hinzu, sodass ich eine andere Farbe habe.
Was für mich funktioniert ist:
quelle
Nehmen wir an, wir haben eine Primärfarbe in
values=>colors.xml
:Wenn wir also unsere benutzerdefinierte Farbe verwenden möchten,
setBackgroundColor(@ColorInt int Color)
benötigen wir nur eine Anmerkung@SuppressLint("ResourceAsColor")
mit dem Konstruktor / der Methode, die wie folgt verwendet wird:quelle
Sie müssen ein
int
im Argument übergeben.Erstes Beispiel:
Zweites Beispiel:
quelle
Dies sollte gut funktionieren:
v.setBackgroundColor(0xFF00FF00);
quelle
Ich habe alle oben genannten Möglichkeiten ausprobiert. Aber ich habe nicht erreicht, was ich brauche. Hier ist mein Versuch. Wenn Sie Hexcode für Farbe verwenden und die Farbe als Hintergrund für das Bild festlegen möchten, ist dies der Kotlin-Code.
quelle