我创建了一个带有圆角边框的自定义编辑字段。但光标显示在CustomEditField
的顶部。如何将光标位置更改为字段的中心。需要有关此问题的帮助。以下代码段是CustomEditField
。
public CustomEditField() {
this(0);
setMaxSize(15);
setCursorPosition(AXIS_VERTICAL);
}
public CustomEditField(long style) {
this(new XYEdges(20, 10, 20, 10), Field.FIELD_HCENTER
| Field.USE_ALL_WIDTH | Field.NON_SPELLCHECKABLE
| TextField.NO_NEWLINE | CONSUME_INPUT | style);
}
public CustomEditField(String label, String initialValue) {
this(0);
setLabel(label);
setText(initialValue);
}
public CustomEditField(XYEdges points, long style) {
super(style);
setPadding(points);
}
/**
* Paints EditField Background with specified Format values
*/
protected void paintBackground(Graphics graphics) {
graphics.setColor(Color.WHITE);
graphics.fillRoundRect(10, getPaddingTop(), getWidth() - 10,
getHeight() - getPaddingBottom(), 20, 20);
graphics.setColor(0x686868);
graphics.drawRoundRect(10, getPaddingTop(), getWidth() - 10,
getHeight() - getPaddingBottom(), 20, 20);
graphics.setColor(Color.BLACK);
}
答案 0 :(得分:1)
首先,有一些概念可以确保你清楚。对于Field
,有边距,填充和边框。 Here is a good description of what they represent ...链接的问题与Android有关,但据我所知,Android和BlackBerry以同样的方式使用这些概念。
如果您希望圆角矩形为边框,那么当您绘制它时,不会通过填充的数量来启动它。填充是内部边界的内容。所以,你应该在(x,y)==(0,0)绘制矩形。如果要在边框外提供一些空间,作为其他字段之间的缓冲区,请使用 margin 。 Field
个对象的setMargin()
调用看起来就像setPadding()
。
其次,方法setCursorPosition()
并不是真正使光标的布局在空间中居中。 It's for setting which character in the EditField the cursor should be next to。不是你想要的这个问题。
此外,您的上述代码并未对称地绘制矩形。请记住,当你在两侧都有填充时,你必须减去顶部和底部垫以获得剩余高度,或者向右减去和以获得剩余宽度。
无论如何,根据您实际需要CustomEditField
填充的方式,您可能需要稍微更改一下。但是,以下内容至少会为您提供一个光标垂直居中的编辑字段。
public class CustomEditField extends BasicEditField {
public CustomEditField () {
this(0);
setMaxSize(15);
//setCursorPosition(AXIS_VERTICAL);
}
public CustomEditField (long style) {
this(new XYEdges(20, 10, 20, 10), Field.FIELD_HCENTER | Field.USE_ALL_WIDTH | Field.NON_SPELLCHECKABLE
| TextField.NO_NEWLINE | CONSUME_INPUT | style);
}
public CustomEditField (String label, String initialValue) {
this(0);
setLabel(label);
setText(initialValue);
}
public CustomEditField (XYEdges points, long style) {
super(style);
setPadding(points);
}
/**
* Paints EditField Background with specified Format values
*/
protected void paintBackground(Graphics graphics) {
graphics.setColor(Color.WHITE);
graphics.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20);
graphics.setColor(0x686868);
graphics.drawRoundRect(0, 0, getWidth(), getHeight(), 20, 20);
graphics.setColor(Color.BLACK);
}
}
请注意,在圆角矩形之前(如果使用默认构造函数),这将在文本上方提供20个像素的空间。这看起来很多。也许这不是你想要的。您可能决定将所有4个边上的填充减少到10个像素,然后在字段上使用setMargin()
以在边框外提供一些空间。你必须要玩它。
顺便说一下,另一种解决这个问题的方法,就是我使用了很多,就是将你的EditField包装在Manager
内,就像VerticalFieldManager
一样。如果你这样做,并且add()
EditField到VerticalFieldManager,样式标志= Field.FIELD_VCENTER
,那么这也应该达到你的目标。但在这种情况下,我认为这不是必要的。