2013-02-09 6 views

ответ

4

Если вы действительно хотите сделать это, изменив размер шрифта внутри переопределенном paint() метода, вы могли бы использовать что-то вроде этого:

public TextScreen() { 
     super(MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR); 

     final int MAX_FONT_SIZE = 24; 
     // this is the font style to use, but the SIZE will only apply to the 
     // beginning of the text 
     Font f = Font.getDefault().derive(MAX_FONT_SIZE); 

     TextField text = new TextField(Field.NON_FOCUSABLE) { 
     public void paint(Graphics g) { 
      char[] content = getText().toCharArray(); 

      Font oldFont = g.getFont(); 
      int size = MAX_FONT_SIZE; 
      // use the baseline for the largest font size as the baseline 
      // for all text that we draw 
      int y = oldFont.getBaseline(); 
      int x = 0; 
      int i = 0; 
      while (i < content.length) { 
       // draw chunks of up to 3 chars at a time 
       int length = Math.min(3, content.length - i); 
       Font font = oldFont.derive(Font.PLAIN, size--); 
       g.setFont(font); 

       g.drawText(content, i, length, x, y, DrawStyle.BASELINE, -1); 

       // skip forward by the width of this text chunk, and increase char index 
       x += font.getAdvance(content, i, length); 
       i += length; 
      } 
      // reset the graphics object to where it was 
      g.setFont(oldFont); 
     }      
     }; 

     text.setFont(f); 
     text.setText("Hello, BlackBerry font test application!"); 

     add(text); 
    } 

Обратите внимание, что я должен был сделать поле NON_FOCUSABLE, потому что если вы обманываете поле, изменяя шрифты в paint() вот так, синий курсор не будет соответствовать базовому тексту. Вы также можете удалить курсор, переопределив drawFocus() и ничего не делая.

Вы не указали какие-либо требования к фокусу, поэтому я не знал, чего вы там хотели.

Если вы готовы рассмотреть другие альтернативы, я думаю, что RichTextField лучше подходит для того, чтобы вы могли изменять размер шрифта (или другие текстовые свойства) в одном и том же поле. Если все, что вы хотите, - это постепенно сокращать текст, как это делает мой пример, эта реализация paint(), вероятно, прекрасна. Если вы хотите выбрать определенные слов в своем поле, чтобы увеличить шрифт (например, с помощью HTML <span> тегов), то RichTextField, вероятно, лучший способ пойти.

Вот результат моего примера кода:

enter image description here

Смежные вопросы