Java BlackBerry垂直居中LabelField,具有自定义高度
我在TableLayoutManager行中嵌套了一个LabelField。我希望行具有特定的高度(与其位图背景相同的高度)。为了实现这一点,我更改了嵌套LabelField的layout()方法:Java BlackBerry垂直居中LabelField,具有自定义高度,java,blackberry,labelfield,Java,Blackberry,Labelfield,我在TableLayoutManager行中嵌套了一个LabelField。我希望行具有特定的高度(与其位图背景相同的高度)。为了实现这一点,我更改了嵌套LabelField的layout()方法: LabelField lblHours = new LabelField(hours, Color.BLACK, Manager.FIELD_VCENTER) { protected void layout(int width, int height) {
LabelField lblHours = new LabelField(hours,
Color.BLACK, Manager.FIELD_VCENTER) {
protected void layout(int width, int height) {
super.layout(width, 40 //height of the bitmap);
setExtent(width, 40 //height of the bitmap);
}
};
这成功地增加了TableLayoutManager行大小。但是,一旦我这样做,LabelField就不再在行内垂直居中。有什么建议吗
谢谢 尝试将
setExtent(width,40)
更改为setExtent(this.getWidth(),40)
。如果getWidth()试图占用所有可用的宽度(这是您的setExtent()调用所做的),并且由于文本将左对齐绘制,看起来您的字段没有居中,但实际上它只占用了表的整个单元格,那么这可能不起作用。或者,如果这不起作用,您可以执行setExtent(Math.min(width,this.getFont().getAdvance(this.getText())),40)
尝试将setExtent(width,40)
更改为setExtent(this.getWidth(),40)
。如果getWidth()试图占用所有可用的宽度(这是您的setExtent()调用所做的),并且由于文本将左对齐绘制,看起来您的字段没有居中,但实际上它只占用了表的整个单元格,那么这可能不起作用。或者,如果这不起作用,您可以执行setExtent(Math.min(width,this.getFont().getAdvance(this.getText())),40)代码>以上答案有效,只需确保为上述内容输入两条语句即可。。如下面的示例所示
LabelField importanceLabel = new LabelField("Importance: ",LabelField.FIELD_VCENTER | LabelField.FIELD_RIGHT) {
public void paint(Graphics g) {
g.setColor(0x145085);
super.paint(g);
}
protected void layout(int width, int height) {
super.layout(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
setExtent(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
}
};
这将是相同的回答。。谢谢你们。。供讨论之用。它帮助了我 上面的答案是有效的,只要确保你为上面的问题写了两个陈述就行了。。如下面的示例所示
LabelField importanceLabel = new LabelField("Importance: ",LabelField.FIELD_VCENTER | LabelField.FIELD_RIGHT) {
public void paint(Graphics g) {
g.setColor(0x145085);
super.paint(g);
}
protected void layout(int width, int height) {
super.layout(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
setExtent(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
}
};
这将是相同的回答。。谢谢你们。。供讨论之用。它帮助了我 你好,jprofitt,谢谢你的帮助。不幸的是,您建议的两种解决方案产生的结果与以前相同……在您进行更改之前,LabelField是否以中心为中心?我的印象是这样的。是的,在我为LabelField设置自定义高度之前,LabelField是垂直居中的。也许不必覆盖布局()尝试将getPreferredHeight()更改为返回40,让它执行正常布局。我已经尝试过了,但它根本没有增加行高,这很奇怪。嗨,jprofitt,谢谢你的帮助。不幸的是,您建议的两种解决方案产生的结果与以前相同……在您进行更改之前,LabelField是否以中心为中心?我的印象是这样的。是的,在我为LabelField设置自定义高度之前,LabelField是垂直居中的。也许不必重写layout(),而是尝试将getPreferredHeight()更改为返回40,让它执行正常布局。我已经尝试过了,但它根本不会增加行高,奇怪的是,我认为您需要提供更多的代码-如何将LabelField添加到TableLayoutManager?嗨,Michael,我有一个切换语句,它基本上贯穿了一周中的每一天(1-7天),对于每种情况,它将实例化扩展TableLayoutManager的自定义类,并将其添加到当前VerticalFieldManager父级。这就是你要找的吗?让我知道,我当然可以提供特定的代码…我认为您需要提供更多的代码-您如何将LabelField添加到TableLayoutManager?嗨,Michael,我有一个切换语句,它基本上贯穿一周中的每一天(1-7天),对于每种情况,它将实例化扩展TableLayoutManager的自定义类,并将其添加到当前VerticalFieldManager父级。这就是你要找的吗?让我知道,我当然可以提供具体的代码。。。