我是一名Android开发人员,正在开发Blackberry应用程序。
我创建了一个全宽度的屏幕按钮。 在将文字移至按钮区域的中心时遇到问题。
在代码下方使用:
ButtonField _contactButton = new ButtonField(Constants.contactButtonTitle,Field.FIELD_HCENTER|Field.USE_ALL_WIDTH |
Field.ACTION_INVOKE | Field.FOCUSABLE | ButtonField.CONSUME_CLICK){
protected void layout(int width, int height) {
super.layout(width, height);
HARD_CODED_HEIGHT = this.getHeight()/2 + 6;
this.setExtent(contactButtonWidth, HARD_CODED_HEIGHT);
}
public int getPreferredWidth() {
return contactButtonWidth;
}
};
现在使用以下代码:
ButtonField _contactButton = new ButtonField(Constants.contactButtonTitle,Field.FIELD_VCENTER|Field.USE_ALL_WIDTH |
Field.ACTION_INVOKE | Field.FOCUSABLE | ButtonField.CONSUME_CLICK){
protected void layout(int width, int height) {
super.layout(getPreferredWidth(), height);
}
public int getPreferredWidth() {
return (Display.getWidth()-60);
}
};
仍然遇到问题..我的按钮文字对齐到右上角。请建议
答案 0 :(得分:1)
ButtonField似乎有点“破碎”了。但是在我测试的所有操作系统级别(OS 5.0到OS 7.1)中它似乎也一直被打破,所以我认为我们可以通过绕过破碎的位来实现你想要的,并确信解决方法可以在所有级别工作你要。
如前所述,ButtonField忽略USE_ALL_WIDTH,但确实尊重preferredWidth。因此,如果要设置ButtonField的宽度,则只需覆盖getPreferredWidth()。你不应该在布局中做任何宽度的事情。
现在您已经使用了ButtonField的样式。鉴于我们已将USE_ALL_WIDTH作为有用样式丢弃,我注意到您还使用了FIELD_HCENTER。您应该知道这实际上是管理器定位此字段的指令 - 告诉管理器将字段放置在Manager可用宽度的中心。此样式与如何绘制ButtonField的内容无关。
为此,您可以使用DrawStyle。默认情况下,ButtonField使用DrawStyle.RIGHT。它尊重DrawStyle.Left - 文本将在左侧绘制。但是,它并不尊重DrawStyle.HCENTER。因此,要获得居中文本,我们需要自己绘制文本。
还有一个并发症。 ButtonField将一个Context区域传递给它的paint()方法,而不是完整的Field画布 - 可能它不会在边缘传递,因为它们是由边框绘制的。因此,为了使文本适当居中,我们必须使用已传入的剪切区域。
这是最终的,希望有效的ButtonField。我很感激你将不得不花一些时间为此创建一个课程,对不起,我已经很懒惰并且已经完成了它的在线工作#39;如果你创建一个....请发布你的CenteredTextButtonField类。
final String buttonText = "Test";
ButtonField _contactButton = new ButtonField(" ",
Field.ACTION_INVOKE | Field.FOCUSABLE | ButtonField.CONSUME_CLICK){
public int getPreferredWidth() {
return contactButtonWidth;
}
protected void paint(Graphics graphics) {
super.paint(graphics);
XYRect clippingRect = graphics.getClippingRect();
int centreY = (clippingRect.height - graphics.getFont().getHeight()) / 2;
graphics.drawText(buttonText, 0, centreY, DrawStyle.HCENTER, clippingRect.width);
}
};
答案 1 :(得分:0)
USE_ALL_WIDTH是我们对该领域的指示。令人惊讶的是,ButtonField忽略了这些指令。更令人惊讶的是,它尊重自己的getPreferredWidth(听起来不合逻辑)。 因此,请删除USE_ALL_WIDTH并定义您的ButtonField,如下所示:
ButtonField testBtn = new ButtonField("Button") {
public int getPreferredWidth() {
return Display.getWidth();
}
};