2012-04-12 61 views
3

我正在自己的應用中實現自定義標籤欄。它使用小字體工作正常,當我增加字體大小時,它將無法正常顯示。在這裏你可以在這張圖片中看到它。黑莓中的自定義標籤欄文字不能正確顯示

enter image description here

您可以在圖片中看到它是隻顯示文本的一半。我該如何克服這一點。

這裏我給我的代碼自定義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; 
    } 

} 

回答

3

在你layout方法你所在領域的高度設置爲當前默認的字體高度。這意味着當您使用較大的字體進行繪製時,文本會被裁剪。爲了解決這個改變你的佈局方法:

protected void layout(int width, int height) { 

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

這是你想要的字體大小轉換爲像素,並使用該設置您的場高度。

3

如何通過擴展LabelField來創建您的CustomLabelField?然後,如果在構造函數中設置了適當的樣式位,則佈局,繪製文本的複雜性(對齊,包裝,樣式考慮等)和其他任務將由LabelField本身完成。

您只需調用setFont(Font)即可應用該Field上的任何字體。該領域本身將調整其大小和繪圖。檢查以下片段。


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); 
    } 
}