So legen Sie die Hintergrundfarbe einer Ansicht fest

178

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.

Peter vdL
quelle
1
Das sieht richtig aus. Ich glaube nicht, dass Sie invalidate () aufrufen müssen. Wenn Sie sagen, dass die Schaltfläche verschwindet, meinen Sie das wörtlich oder bedeutet die Schaltfläche, dass Text oder ein Bild darauf verschwunden ist?
RickNotFred

Antworten:

280

Sie haben Ihren Button transparent gemacht. Das erste Byte ist das Alpha.

Versuchen v.setBackgroundColor(0xFF00FF00);

Regenhütte
quelle
2
Die Antwort von EddieB unten ist viel besser, da dadurch alle Grenzen usw. entfernt werden, z. B. die Unterstreichung eines EditText
Geschmolzenes Eis
@aroth ist besser Color.Green? Wenn ich Farbkomplex mit Argb will? ... Ihre Antwort ist veraltet
liefern
2
@ Delive - Komm wieder? Color.GREEN ist nicht veraltet und enthält das Alpha-Byte. Sein Wert ist 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.
Aroth
144

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 ...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

Experimentieren Sie mit PorterDuff.Mode. * Für verschiedene Effekte.

EddieB
quelle
"Überschreibt / entfernt vorhandene Hintergrundressourcen", nicht wirklich.
Yousha Aleayoub
2
Ich musste das oben genannte zusammen mit v.invalidate () verwenden; in der nächsten Zeile.
Hashim Akhtar
1
versuchte diese verschwendete Zeit und ging mit der akzeptierten Antwort, v.getBackground () gab nullpointer Ausnahme und stürzte ab.
Siddarth G
Dies plus PorterDuff.Mode.SRC_IN wurde für mich gelöst, damit ich meinen Hintergrundrahmen nicht verliere.
Guilherme Carvalho
123

Mehrere Möglichkeiten, dies zu tun ...

Hintergrund auf grün setzen:

v.setBackgroundColor(0x00FF00);

Setzen Sie den Hintergrund mit Alpha auf Grün :

v.setBackgroundColor(0xFF00FF00);

Setzen Sie den Hintergrund mit der Konstante Color.GREEN auf Grün:

v.setBackgroundColor(Color.GREEN);

Setzen Sie den Hintergrund in Colors.xml auf grün

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

und mit:

v.setBackgroundResource(R.color.myGreen);

und:

v.setBackgroundResource(R.color.myGreenWithAlpha);

oder die länger gewundenen:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

und:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));
Jorgesys
quelle
getResources().getColor(...)wurde veraltet stackoverflow.com/questions/31842983/…
Junior Mayhé
5
Es gibt auch: v.setBackgroundResource(R.color.myGreen);bei der Verwendungcolors.xml
grimmig
Die invalidateAufrufe wurden entfernt, da Sie sehen können, dass setBackground... Methoden dies bereits aufrufen.
Weston
v.setBackgroundColor(0x00FF00);ist nur ihr Code, von dem sie sagen, dass er nicht funktioniert. Ich würde auch erwarten, dass es transparent ist.
Weston
35

Sie können die Hex-Farbe für jede Ressource festlegen mit:

View.setBackgroundColor(Color.parseColor("#e7eecc"));
Vipul Patel
quelle
16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

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.

malte kosian
quelle
12

und wie kann man die Hintergrundfarbe in einer Ansicht richtig ändern?

Auf irgendeinen View ? Was Sie haben, ist richtig, obwohl Sie das fallen lassen sollteninvalidate() Anruf .

Einige Viewshaben jedoch bereits Hintergründe. A Buttonhat zum Beispiel bereits einen Hintergrund: das Gesicht der Schaltfläche selbst. Dieser Hintergrund ist ein StateListDrawable, 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.

CommonsWare
quelle
OK, danke für die Erklärung der Button-Hintergründe. Neun Patch-Bitmaps ( developer.android.com/reference/android/graphics/NinePatch.html ) waren für mich neu. Ich möchte einfach die Farbe von allem auf dem Bildschirm ändern, wenn ich eine Taste drücke. Die Schaltflächen befinden sich in einer Textansicht. Der Versuch, die Farbe zu ändern, führt zu Konsolenmeldungen "Zeitüberschreitung bei DDM-Versandregistrierung ... ActivityManager: DDM-Block kann nicht versendet werden 52454151: Kein Handler definiert" und ein Dialogfeld auf dem Bildschirm "Die App wurde unerwartet gestoppt". Ich denke, ich muss mehr auf der Benutzeroberfläche lesen. Hinweise willkommen. Vielen Dank.
Peter vdL
11

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:

android:background="#FF00FF00"
Justin B
quelle
Die Frage macht deutlich, dass der Farbwechsel dynamisch sein muss.
Peter vdL
11

versuchen Sie hinzuzufügen:

setBackgroundColor(Color.parseColor("#FF0000"));
Langer Regenbogen
quelle
6

Ich benutze bei API min 16, Ziel 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
Vostro
quelle
Normalerweise gibt es nicht viele Standardfarben. Neue Farben können in res / values ​​/ colours definiert werden, wie hier beschrieben. Developer.android.com/samples/BasicMediaRouter/res/values/…
Krystian
5

Sie können einfach verwenden:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));
Daniel Kilinskas
quelle
5
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
Gianluca Demarinis
quelle
4

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.

jbranchaud
quelle
3

Wenn Sie mit Android 6 angeben, verwenden Sie ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
Raluca Lucaci
quelle
2

Sie können einfach verwenden:

view.setBackgroundColor(Color.rgb(0, 198, 255));
Mahmoud Salah Eldien Säbel
quelle
2

In Kotlin könnte man das so machen:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

Wo getColorCompat()ist eine Erweiterungsfunktion:

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)
Android-Entwickler
quelle
1
view.setBackgroundColor(R.color.primaryColor);

Fügt dem vorherigen Farbwert Farbe hinzu, sodass ich eine andere Farbe habe.

Was für mich funktioniert ist:

view.setBackgroundResource(R.color.primaryColor);
Meralon
quelle
1

Nehmen wir an, wir haben eine Primärfarbe in values=>colors.xml:

<resources>
    <color name="primary">#FDD835</color>
</resources>

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:

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }
ForWebTech
quelle
0

Sie müssen ein intim Argument übergeben.

Erstes Beispiel:

view.setBackgroundColor(-500136)

Zweites Beispiel:

int colorId = R.color.green;

view.setBackgroundResource(colorId);
David Mutenda
quelle
0

Dies sollte gut funktionieren: v.setBackgroundColor(0xFF00FF00);

Nishanuw
quelle
0

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.

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
Shaffz
quelle