我正在我的应用中实现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;
}
}
答案 0 :(得分:3)
在layout
方法中,您将字段的高度设置为当前的默认字体高度。这意味着当您使用较大的字体绘制时,文本会被裁剪。要解决此问题,请将布局方法更改为:
protected void layout(int width, int height) {
int fieldHeight = Ui.convertSize(fontSize, Ui.UNITS_pt, Ui.UNITS_px);
setExtent(width, fieldHeight);
}
这会将您想要的字体大小转换为像素,并使用它来设置字段高度。
答案 1 :(得分:3)
仅通过延长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);
}
}