Текст не подходит должным образом с Custom LabelField в Blackberry

Я реализую Custom LabelField в моем приложении. Он работает нормально с маленькими шрифтами, когда я увеличиваю размер шрифта, он не будет отображаться правильно. Здесь вы можете увидеть это на этом изображении.

Вы можете видеть на изображении, что показывает только половину текста. Как я могу преодолеть это.

Здесь я даю свой код для пользовательского LabelField. Пожалуйста, скажите мне, что я делаю не так.

public class CustomLabelField extends Field  
{  
    private String label;  
    private int fontSize;
    private int foregroundColor;  
    private int backgroundColor;  
    public CustomLabelField(String label, int fontSize, int foregroundColor,  
                     int backgroundColor,long style)  
    {  
        super(style);  
        this.label = label;  
        this.foregroundColor = foregroundColor;  
        this.backgroundColor = backgroundColor;  
        this.fontSize = fontSize;
    }  

   protected void layout(int width, int height) {  

       setExtent(width, getFont().getHeight());  


   }  

    protected void paint(Graphics graphics) {  

       graphics.setBackgroundColor(backgroundColor);  
       graphics.clear();  
       graphics.setFont(setMyFont());  
       graphics.setColor(foregroundColor);  
       graphics.drawText(label, 0, 0, (int)(getStyle()& DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK),getWidth() - 6);  
   }  

   // Get font for the label field  
   public Font setMyFont()  
   {  
     try {  
         FontFamily alphaSansFamily = FontFamily.forName("BBAlpha Serif");  
         Font appFont = alphaSansFamily.getFont(Font.PLAIN, fontSize, Ui.UNITS_pt);  
         return appFont;  

    } catch (ClassNotFoundException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
    return null;  
  }  

}

2 ответа

Решение

В вашем layout Метод, которым вы устанавливаете высоту вашего поля для текущей высоты шрифта по умолчанию. Это означает, что при рисовании более крупным шрифтом текст обрезается. Чтобы решить эту проблему, измените метод макета на:

protected void layout(int width, int height) {  

    int fieldHeight = Ui.convertSize(fontSize, Ui.UNITS_pt, Ui.UNITS_px);
    setExtent(width, fieldHeight);  
}  

Это преобразует желаемый размер шрифта в пиксели и использует его для установки высоты поля.

Как насчет создания вашего CustomLabelField просто расширяя LabelField? Затем макет, сложность рисования текста (выравнивание, перенос, стиль и т. Д.) И другие задачи будут выполняться LabelField сам, если вы установите соответствующий бит стиля в конструкторе.

И вы можете просто применить любой шрифт на этом Field просто вызывая setFont(Font), Само поле будет регулировать его размер и рисунок. Проверьте следующие фрагменты.


Реализация CustomLabelField:

class CustomLabelField extends LabelField {
    private int foregroundColor;
    private int backgroundColor;

    public CustomLabelField(String label, int foregroundColor,
            int backgroundColor, long style) {
        super(label, style);
        this.foregroundColor = foregroundColor;
        this.backgroundColor = backgroundColor;
    }

    protected void paint(Graphics graphics) {
        graphics.setBackgroundColor(backgroundColor);
        graphics.clear();
        graphics.setColor(foregroundColor);
        super.paint(graphics);
    }
}


Пример:

class MyScreen extends MainScreen {

    public Font getMyFont(int fontSize) {
        try {
            FontFamily alphaSansFamily = FontFamily.forName("BBAlpha Serif");
            return alphaSansFamily.getFont(Font.PLAIN, fontSize, Ui.UNITS_pt);
        } catch (Exception e) {
        }
        return null;
    }

    public MyScreen() {
        CustomLabelField clf = new CustomLabelField(
                    "Main",
                    Color.WHITE,
                    Color.BLACK,
                    LabelField.ELLIPSIS);

        // Font setup
        clf.setFont(getMyFont(20));

        add(clf);
    }
}
Другие вопросы по тегам