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.


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);


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.


"Ü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));

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"));

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.


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.


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"

Die Frage macht deutlich, dass der Farbwechsel dynamisch sein muss.
Peter vdL


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));

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



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.


3

Wenn Sie mit Android 6 angeben, verwenden Sie ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));


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)

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);

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);

        ....


    }

0

Sie müssen ein intim Argument übergeben.

Erstes Beispiel:

view.setBackgroundColor(-500136)

Zweites Beispiel:

int colorId = R.color.green;

view.setBackgroundResource(colorId);

0

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


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