2016-03-18 4 views
1

Ich entwickle eine Liste und möchte bestimmte Zeilen hervorheben, indem ich die Schriftfarbe rot anzeige. Ist das möglich?Wie kann ich die Farbe einer bestimmten Zeile in einer libgdx-Liste festlegen?

EDIT: Ok, hier eine vereinfachte Version von meinem Code:

Skin defListSkin = new Skin(Gdx.files.internal("data/uiskin.json")); 

List listHistory = new List<String>(defSkin); 

// Here I set the general font color for the list 
List.ListStyle listStyle = listHistory.getStyle(); 
listStyle.font = fontList; 
listStyle.fontColorUnselected = Color.LIGHT_GRAY; 
listHistory.setStyle(listStyle); 

String[] items = new String[20]; 

// Example of item[] 
// item[0]: "John 12" 
// item[1]: "Amy -3" <-- I want certain lines to appear in red (e.g. those with negative numbers) 

// Populate the list 
listHistory.setItems(items); 

// Drawing the list (actual draw happens in render() of course) 
Table myTable = new Table(); 
myTable.add(listHistory); 
stage.addActor(myTable); 
+0

viel zu vage :) uns geben, was Sie haben versucht, und vielleicht Screenshot von dem, was Sie erreichen wollen. – Enigo

+0

Wie zeichnen Sie gerade Ihre Linien? Haben Sie eine Art "Liste "? Sie können wahrscheinlich 'spriteBatch.setColor (..)' tun. – Madmenyo

Antwort

2

Verwenden Sie die Color Markup Language, die Libgdx unterstützt.

Die Markup-Syntax ist sehr einfach, aber immer noch vielseitig:

[name] Setzt die Farbe nach dem Namen. Es gibt ein paar vordefinierte Farben, siehe die Colors.reset() -Methode für eine erschöpfende Liste. Benutzer können ihre eigenen Farben über die Methoden der Colors-Klasse definieren. [#xxxxxxxx] Legt die Farbe fest, die durch den Hexadezimalwert xxxxxxxx im Format RRGGBBAA angegeben wird, wobei AA optional ist und standardmäßig 0xFF ist. [] Setzt die Farbe auf die vorherige Farbe (Art des optionalen End-Tags) [[Entfernt die linke Klammer.

Das Markup ist standardmäßig deaktiviert. Verwenden Sie das öffentliche Element font.getData(). MarkupEnabled, um es zu aktivieren/deaktivieren.

Referenz: https://github.com/libgdx/libgdx/wiki/Color-Markup-Language

Wenn Sie eine komplexere HTML-Markup wie möchten, können Sie diese Vorlagen verwenden: https://github.com/czyzby/gdx-lml, Live-Tests: http://czyzby.github.io/gdx-lml-tests/

+0

Ausgezeichnet - es funktioniert! Ich wusste nichts über die Color Markup Language. Danke dafür. – go3d

+0

Froh, zu helfen :) – Hllink

0

Ich weiß, was du meinst, und ich glaube nicht, es ist möglich. Die Listenelemente sind alle mit demselben listStyle verknüpft, und die einzige Möglichkeit, die Farbe der Listenelemente zu ändern, besteht darin, einen neuen Stil für listHistory zu erstellen und die Schriftfarbe dieses Stils zu ändern. Wenn Sie dies tun, werden jedoch alle Elemente geändert in der Liste zu dieser neuen Schriftfarbe. Mein Vorschlag wäre, zwei separate Listen und zwei separate ListStyles zu erstellen und die Zeilen, die rot sein sollen, in einer Liste zu haben und einen Stil zu haben und die Zeilen, die nicht rot sein sollen, in einer anderen Liste zu haben. Hoffe, das hilft