2010-03-13 2 views
2

TreeField 및 ListField에서 볼 수있는 화면 크기보다 큰 텍스트가 필요한 응용 프로그램을 작성하고 있습니다. TreeField 및 ListField 콜백은 graphics.drawText() 메서드 만 지원하므로 행 당 필드의 인스턴스를 추가 할 수 없습니다.TreeField 또는 ListField에서 BlackBerry 가로 스크롤

누구나 볼 수있는 텍스트 크기보다 수평으로 스크롤하는 방법이 있습니까?

작동하는 스크롤 가능한 패널이 있습니까? 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의 행 높이가 모든 행에 대해 동일합니다 (( –