2010-03-13 8 views
2

Je travaille sur une application qui nécessite un texte plus grand que la taille d'écran visible dans un TreeField et un ListField. Comme vous le savez, les callbacks TreeField et ListField supportent uniquement les méthodes graphics.drawText(), donc je ne peux pas ajouter une instance d'un champ par ligne.Défilement horizontal de BlackBerry dans TreeField ou ListField

Est-ce que quelqu'un a une méthode de défilement horizontal passé la taille du texte visible?

Y a-t-il peut-être un panneau déroulant qui fonctionnerait? Je connais l'astuce NullField (Field.Focusable) mais cela ne fonctionnera pas sur le champ liste. Enfin, je suis conscient que le type d'écran est différent car FullScreen et MainScreen utilisent VerticalFieldMangers. Donc j'utilise un PopupScreen en ce moment pour mes tests.

Merci d'avance pour votre temps.

Répondre

1

Peut-être qu'il est préférable de diviser le texte en deux lignes et de définir la hauteur de la ligne 2 x hauteur de la police (+ marges)?

alt text http://img219.imageshack.us/img219/5802/listh.jpg

class Scr extends MainScreen implements ListFieldCallback { 
    int DISPLAY_WIDTH = Display.getWidth(); 
    Vector mItems = new Vector(); 
    ListField mListField = new ListField(); 

    public Scr() { 
     mListField.setCallback(this); 
     add(mListField); 
     mItems.addElement("Lorem ipsum dolor sit amet, "); 
     mItems.addElement("Lorem ipsum dolor sit"); 
     mItems.addElement("Lorem ipsum dolor sit amet, "+ 
      "consectetuer adipiscing elit"); 
     mItems.addElement("Lorem ipsum dolor sit amet, "+ 
      "consectetuer adipiscing elit, sed diam "+ 
       "nonummy nibh euismod"); 
     mItems.addElement("Lorem ipsum dolor sit amet, "+ 
      "consectetuer adipiscing elit"); 
     mItems.addElement("Lorem ipsum dolor sit amet, "); 
     mListField.setSize(mItems.size()); 
     mListField.setRowHeight(
       mListField.getFont().getHeight()*2 + 4);   
    } 

    public void drawListRow(ListField field, Graphics g, 
     int i, int y, int w) { 
     // Draw the text. 
     String text = (String) get(field, i);   
     if(g.getFont().getAdvance(text) > w) 
     { 
      int index = 0; 
      while(g.getFont().getAdvance(text.substring(0, index)) < w) 
      { 
       index++; 
      } 
      g.drawText(text.substring(0, index), 0, y, 0, w); 
      g.drawText(text.substring(index, text.length()-1), 0, 
      y + g.getFont().getHeight()+ 4, DrawStyle.ELLIPSIS, w); 
     } 
     else 
     { 
      g.drawText(text, 0, y, 0, w); 
     } 
    }  

    public Object get(ListField listField, int index) { 
     return mItems.elementAt(index); 
    } 

    public int getPreferredWidth(ListField listField) { 
     return DISPLAY_WIDTH; 
    } 

    public int indexOfList(ListField listField, 
     String prefix, int start) { 
     return 0; 
    } 
} 
+0

Vous pouvez avoir raison à ce sujet, il ne semble pas possible autrement. Je pensais peut-être que si je pouvais juste montrer la deuxième ligne sur celle qui est focalisée, cela aiderait à éviter d'encombrer l'écran. – sethxian

+0

bien, vous pouvez Si vous construisez un contrôle personnalisé (gestionnaire vertical + étiquettes) ... Row heigh dans ListField est le même pour toutes les lignes (( –

Questions connexes