Ja, schon wieder: btn.setBackgroundColor()

  • 28 Antworten
  • Letztes Antwortdatum
OK wir müssen uns der Sache ja mal annähern... Kommentier mal den Aufruf von blockButtons() und von showNextQuestion() aus, damit wir sicher sein können, dass es keiner dieser Methoden ist, die den bug verursachen.

Der ursprüngliche Beitrag von 23:51 Uhr wurde um 23:57 Uhr ergänzt:

jetzt sehe ich gerade noch in deiner Layout xml änder mal
style="@color/answerDefault"
in
android:background="@color/answerDefault"
 
raptus93 schrieb:
Wo wir grade beim Thema testen sind, kennst du da ne gute Methode? Ich habe ein HTC desire und hab mir extra zum testen noch ein DesireHD angeschafft, aber ich kriege es trotz aufwändiger Treiberbeschaffung nicht hin, das Eclipse eins davon erkennt.
Jetzt teste ich mit diesen beschissenen Emulatoren, aber das raubt mir noch den letzten Nerv, das geht garnicht. Wie lange der immer braucht!:ohmy:

Tatsache, der Emulator ist ziemlicher Dreck. Ich bin auch wahnsinnig geworden. Genymotion nehmen hilft. Schnell, wirklich extrem schnell und einfach einzurichten. Perfekt!

Der ursprüngliche Beitrag von 06:07 Uhr wurde um 06:23 Uhr ergänzt:

Nachtrag:
Amfa hat schon beschrieben, wie es funktioniert.

Probiere das mal..

Pseudocode:
Code:
Button press_me // Initialisierung 
push_me.setBackgroundColor(Color.parseColor("white"))

die vordefinierten farbwerte von Color findet man in der Google Doku.
 
setBackground() ist die falsche Methode. Für eine Farbe aus den Resourcen brauchst man die Methode setBackgroundResource()
View | Android Developers
 
er benutzt ja setBackgroundColor() und wenn man da dann this.getResources().getColor() aufruft führ das zum gleichen Ergebnis...

hat denn das ändern der xml oder das auskommentieren der Methoden etwas gebracht?
 
  • Danke
Reaktionen: ui_3k1
markus.tullius schrieb:
setBackground() ist die falsche Methode. Für eine Farbe aus den Resourcen brauchst man die Methode setBackgroundResource()
View | Android Developers

Falsch!
genau so gehts ->
Code:
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class TestActivity extends Activity implements OnClickListener {

    private Button button1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button1) {
            button1.setBackgroundColor(Color.parseColor("white"));
        }

    }
}
und so gehts auch:
Code:
@Override
    public void onClick(View v) {
        if (v.getId() == R.id.button1) {
            button1.setBackgroundColor(0xDD1124AA);
        }

    }
und sogar das geht:
Code:
private static int my_col = 900520000;

[...]

button1.setBackgroundColor(my_col);
Jetzt hat man die Qual der Wahl - nur jetzt in der .xml etwas zu ändern ist nicht angeraten.

Dazu noch ein paar kleine Bit-Operationen in dieser Schreibweise
Code:
private static int  my_col = 0b01001000_01000001_11100101_01011110;
und schon kann man der örtlichen Disko Konkurrenz machen :D
 
Zuletzt bearbeitet:
Falsch!
genau so gehts ->
Eine sehr interessante Ansicht, ich dachte bis jetzt immer das Android das MVC Pattern umsetzt. Muss mich wohl geirrt haben. ;)

Layout gehört immer in die Resourcen!!!

Durfte mal eine App aufräumen, wo jemand an 20 Stellen im Code die gleiche Farbe gesetzt hat. Ist ein sehr spaßige Erfahrung. So etwas nennt man dann leicht wartbaren Code.:sad:

Noch ein Tipp zu deinem Code. Wenn du nicht mit globalen Variablen arbeitest, vermute ich mal, dass deine Farben eigentlich Konstanten sind. Dann würde ich den Modifikator final benutzen.

Code:
private static final int  my_col = 0b01001000_01000001_11100101_01011110;
 
Bist du dir sicher mit dem Layout? Mir ist keine Konvention bekannt, wird aber ein paar Sachen geben, die über Layout schlicht weg nicht möglich sind... So Sachen lasse ich gerne über den Code laufen, da Änderungen ziemlich flott ohne lästigen Tabwechsel gemacht sind. :)

Jo, das mit dem final stimmt, bin derzeit bedingt durch Studium mit c++ geschädigt. Da heißt es const und so verraffe ich da hin und wieder mal die spezifizierer, gerade bei schnellen Testprogrammen. :p
 
Man muss nicht. Aber es macht das Leben bei größeren Projekten viel einfacher. Spätestens wenn das komplette Design vom Kunden verworfen wurde, ist man froh, dass man nur die xml Dateien ändern muss. Oder wenn man eine mehrsprachige App programmieren muss.

Zu MVC, ist in Android nicht perfekt umgesetzt, aber es erleichtert einen Leben.

Und ja, ich bin mir sicher. ;)
 
  • Danke
Reaktionen: ui_3k1
@raptus93
Wie ist der Sachstand?
 
Zurück
Oben Unten