Button Farbe zur Laufzeit ändern

M

Manuel1805

Ambitioniertes Mitglied
2
Liebes Forum,

ich dachte nicht, dass die Farbänderung eines Buttons (zur Laufzeit) so viel Probleme machen kann.
Kann mir jemand sagen, wie ich nach einem Ereignis z.B. beim Buttonclick (...mit einem OnClicklistener...)


  • Button 1: mit der Farbe rot
  • Button 2: mit der Farbe grün

belegen kann. Und nach einem einem Ereignis (...OnClicklistener) die Buttons wieder mit dem Standardgrau belege. Mir gehts nur um das Setzen der Farbe! Das ganze soll zur Laufzeit passieren (kein XML wenn möglich).

Vielen Dank
 
Kennt dann niemand die Lösung.
Nach meiner Internet-Recherche tritt das Problem zwar öfter auf, eine Lösung hat meines Erachten noch niemand gepostet.
Meine Versuche die Farbe zu ändern sind leider kläglich gescheitert!

Die folgende Lösung z.B.:
Code:
antwort1.setBackgroundColor(this.getResources().getColor(R.color.grau));

funktioniert leider nicht. (Der Button wird zwar grau, ist aber nicht mehr Funktionsfähig) :drool:

Über einen Tipp würde ich mich freuen!!
 
Ich gebe dir auch eine Erklärung dazu warum man das so machen muss, allerdings kann ich dir nicht 100% sagen ob die Erklärung stimmt, da ich auch erst 1 Jahr bei der Android Entwicklung bin.

Bei einem Button hast du 3 "Zustände". onFocus, normal und onpressed. und deswegen musst du allen 3 Werte dann auch eine Farbe zuweißen.

Hallo, du musst das über einen selector machen!

@drawable/btn_green_selector.xml erstellen und folgenden code einfügen
@drawable/btn_red_selector.xml erstellen und folgenden code einfügen
@drawable/btn_normal_selector.xml erstellen und folgenden code einfügen

Mit dem Hexcode kannste auch andere Farben einstellen.
Code:
<?xml version="1.0" encoding="utf-8"?>     <selector xmlns:android="http://schemas.android.com/apk/res/android">     <item android:state_pressed="true" android:drawable="#556B2F" />     <item android:state_focused="true" android:drawable="#006400" />     <item android:drawable="#006400" /> </selector>
in deiner Acitivity schreibst du dann bei dem button:

android:drawable="@drawable/btn_normal_selector.xml



und im Code:
antwort1.setBackgroundResource(R.drawable.btn_green_selector);
antwort1.setBackgroundResource(R.drawable.btn_red_selector);

umd dann eine andere Farbe auszuwählen. Wenn du 2 verschiedene Farben haben möchtetst, kannst du auch 2 Selectoren erstellen.

Hier die Epischte Seite im Web: http://paletton.com/
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Manuel1805
Hallo kukuk,

vielen Dank für Deine Hilfe! Ich werde das gleich morgen mal probieren.
D.h. ich muss für die drei Farben drei XML-Dateien erstellen und diese dann, wie von dir beschrieben, dem jeweiligen Button zuweisen.

...gleichwohl deiner tollen Lösung ist mir eine Mehtode der Klasse Button lieber. Falls es diese geben sollte und jemand weiß wie diese eingesetzt wird (vll. auch über einen Art Filter) würde ich mich auch über eine weitere Lösung freuen.

Viele Grüße

Manuel
 
Vielleicht so?

button.setBackgroundColor(Color.RED);
button.setBackgroundColor(Color.GREEN);
button.setBackgroundColor(Color.GRAY);

Der ursprüngliche Beitrag von 23:12 Uhr wurde um 23:14 Uhr ergänzt:

Ansonsten wie schon zuvor erwähnt hier nochmal von offizieler Seite : Buttons | Android Developers
 
Ja, naja... Ganz so einfach ist das nicht, jedenfalls nicht wenn das Material Design erhalten bleiben soll.
Vorweg wäre es auf jeden Fall sinnvoll die Api des Nutzers zu kennen und dann auf entsprechende Methoden zu reagieren.
setBackgroundDrawable(R.drawable.xy) wäre zb eine Methode, die ab api 16 zur Verfügung steht (glaube ich), ob die für geplantes Vorhaben ausreichend ist, weiß ich nicht, werde ich aber heute Nachmittag selbst mal testen, da ich in meinem Programm etwas ähnliches vorhabe :)
 
Hallo zusammen,

vielen Dank für Eure Vorschläge und Hilfe!

Vielleicht habe ich auch etwas gefunden, was dem / der Einen gefallen könnte. Vielleicht nicht so elegant aber es funktioniert "simple" :)

Hier mein Beispiel für das Setzen und Löschen einer Farbe ....
Code:
//0x + Farbe
        //grün = 008000
        //rot = FF0000
        //grau = getBackground.clearColorFilter();
        antwort1.getBackground().setColorFilter(
                new LightingColorFilter(0x1a3b4e00, 0x008000));
        antwort2.getBackground().setColorFilter(
                new LightingColorFilter(0x1a3b4e00, 0x008000));
        antwort1.getBackground().clearColorFilter();
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
337
swa00
swa00
MES
Antworten
10
Aufrufe
821
MES
MES
D
Antworten
14
Aufrufe
1.716
chrs267
chrs267
Zurück
Oben Unten