Tworzę pierwszą aplikację na BlackBerry i chcę zmienić tło na czarne, a cały tekst (w etykietach BasicEditField, Label itd.) na biało.

Próbowałem użyć metody setBackground(Background bg) na VerticalFieldManager, ale to tylko zaciemniło ekran, jeśli chodzi o moje komponenty. Oznacza to, że jeśli mam tylko dwa przyciski jeden pod drugim, tło jest czarne aż do końca przycisków. Tak więc, gdy na ekranie jest mniej elementów, ekran jest w połowie czarny, a w połowie biały.

Czy mogę w jakiś sposób osiągnąć pożądane zachowanie:

  • Cały ekran powinien być czarny.
  • Wszystkie etykiety tekstowe powinny być białe.

Każda pomoc bardzo doceniana!

1
Roshnal 8 marzec 2012, 16:56

2 odpowiedzi

Najlepsza odpowiedź

Ten kod ustawi twoje tło jako czarne, a pole edycji jako białe

VerticalFieldManager backg = new VerticalFieldManager(Field.USE_ALL_WIDTH | Field.USE_ALL_HEIGHT){
public void paint(Graphics graphics) {
graphics.setBackgroundColor(Color.BLACK);
graphics.clear();
super.paint(graphics);
    }
};

Teraz dodaj pole edycji jako

EditField edit= new EditField("", "", 100, Field.FOCUSABLE){
protected void paintBackground(Graphics g) {
           g.setBackgroundColor(Color.WHITE);
           g.clear();
       }



backg.add(edit);
add(backg);

Użyj g.setColor(Color.WHITE);, aby zmienić kolor czcionki.

4
Signare 8 marzec 2012, 17:20

Wersja Signare działa ze starszymi wersjami, ale istnieje inna opcja od OS 4.6. Sprawdź zajęcia w net.rim.device.api.ui.decor.

Używam tego do zmiany tła ekranu w jednym z moich programów:

public class MyScreen extends MainScreen {

    MyScreen() {

        Background screenColor = BackgroundFactory.createSolidBackground(Color.Black);
        Manager backg= getMainManager();
        backg.setBackground(screenColor);

        EditField edit = new EditField("", "", 100, Field.FOCUSABLE){
            protected void paint(Graphics g) {
                g.setColor(Color.WHITE);
                super.paint(g);
            }
        };
        Background fieldColor = BackgroundFactory.createSolidBackground(Color.BLACK);
        edit.setBackground(fieldColor);

        backg.add(edit);
    }
}

Wszystkie twoje pola mają metody .setBackround() i .setBorder(), które pozwalają na pewne modyfikacje. Uważam, że jest to łatwiejszy sposób niż podklasowanie wszystkich moich komponentów tylko po to, aby zmienić kolor tła. Niestety nadal musisz to zrobić, aby zmienić kolor tekstu EditField lub LabelField.

2
Core.B 9 marzec 2012, 18:30