2010-03-13 17 views
2

我正在研究一個應用程序,它要求TreeField和ListField中的文本大於可視屏幕大小。如您所知,TreeField和ListField回調僅支持 graphics.drawText()方法,所以我無法爲每行添加一個Field實例。BlackBerry Tree在TreeField或ListField中水平滾動

有沒有人有一種水平滾動瀏覽文本大小的方法?

是否有可能會工作的滾動面板?我知道NullField(Field.Focusable)技巧,但這不適用於列表字段。

最後,我知道屏幕的類型與FullScreen和MainScreen使用VerticalFieldMangers不同。所以我現在使用PopupScreen進行測試。

預先感謝您的寶貴時間。

回答

1

也許最好是將文本分成兩行並設置行高2 x字體高度(+頁邊距)?

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

你可能是對這個,它似乎並不可能的任何其它方式。我在想,如果我能夠在顯示第二行的時候集中注意力,它可以幫助阻止屏幕的混亂。 – sethxian

+0

好吧,你可以如果你建立一個自定義控件(垂直經理+標籤)...在ListField中的行高度是相同的所有行(( –