2010-09-13 28 views
2

Comment créer un RichTextEdit en utilisant l'API RIM 4.5 contenant du texte avec plusieurs couleurs?
Par exemple, je veux créer un RichTextEdit comme suit:RichTextEdit avec un texte multicolore?

  • Le texte est "Bonjour BB monde"
  • "Bonjour" devrait être bleu
  • "BB monde" devrait être rouge
  • "BB" devrait être ITALIC
  • « Bonjour » devrait être BOLD

Le principal problème est d'obtenir des couleurs, pas gras et en italique.
J'ai essayé de surcharger RichTextEdit.paint fonction, mais cela formate la couleur de la chaîne entière, pas seulement une sous-chaîne de celle-ci!

Voici le code que je mis en œuvre pour rendre le texte en gras et en italique et en remplaçant la peinture pour changer toute la couleur de la chaîne:

public final class RichTextFieldSample extends UiApplication 
{ 
    public static void main(String[] args) 
    { 
     RichTextFieldSample theApp = new RichTextFieldSample(); 
     theApp.enterEventDispatcher(); 
    } 
    public RichTextFieldSample() 
    { 
     String richText = "This is how you create text with formatting!!!"; 
     Font fonts[] = new Font[3]; 
     int[] offset = new int[4]; 
     byte[] attribute = new byte[3]; 
     fonts[0] = Font.getDefault(); 
     fonts[1] = Font.getDefault().derive(Font.BOLD); 
     fonts[2] = Font.getDefault().derive(Font.BOLD | Font.ITALIC); 
     offset[0] = 0; 
     attribute[0] = 2; 
     offset[1] = 4; 
     attribute[1] = 0; 
     offset[2] = 33; 
     attribute[2] = 1; 
     offset[3] = richText.length(); 

     RichTextField rtField = new RichTextField 
      (richText, offset, attribute, fonts, 
      RichTextField.USE_TEXT_WIDTH) { 
       protected void paint(Graphics graphics) { 
        graphics.clear(); 
        graphics.setColor(0x0000FF); 
        super.paint(graphics); 
       } 
     }; 

     MainScreen mainScreen = new MainScreen(); 
     mainScreen.setTitle(new LabelField 
      ("RichTextFieldSample Sample", 
      LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH)); 
     mainScreen.add(rtField); 
     pushScreen(mainScreen); 
    } 
} 
+0

Pourriez-vous poster votre exemple de code qui définit la police en gras et en italique? Publiez également votre code qui remplace RichTextEdit.paint. –

+0

Question mise à jour avec l'exemple de code que vous avez demandé –

Répondre

2

Malheureusement pas de réponse facile à celui-ci. Selon this post, RichTextField ne prend pas en charge plusieurs couleurs (malgré la présence d'une méthode getForegroundColors).

Il est peut-être possible d'étendre RichTextField pour prendre en charge plusieurs couleurs, mais avec la quantité de travail nécessaire, il sera probablement plus facile de mettre en œuvre votre propre Field à partir de zéro.