-1

我有一个自定义编辑字段

public class Custom_EditField extends EditField {
int width, row;

Custom_EditField(long style, int width, int row) {
    super(style);
    this.width = width;
    this.row = row;
}

protected void layout(int width, int height) {
    width = this.width;
    height = this.row;
    super.layout(width, Font.getDefault().getHeight() * row);
    super.setExtent(width, Font.getDefault().getHeight() * row);
}

public int getPreferredHeight() {
    return Font.getDefault().getHeight() * row;
}

public int getPreferredWidth() {
    return width;
}

public void paint(Graphics graphics) {
    super.paint(graphics);
    graphics.setBackgroundColor(Color.GRAY);
    graphics.clear();
    graphics.setColor(Color.BLACK);
    int labelWidth = getFont().getAdvance(getLabel());
    graphics.drawRect(labelWidth, 0, getWidth() - labelWidth, getHeight());
    graphics.drawText(this.getText(), 0, 0);
}
}

当我在编辑字段中键入一整行单词时,它会导致错误。似乎无法自动转到下一行。

4

1 回答 1

1

BlackBerry UI 中布局方法的参数是最大值,您的自定义代码在设置字段范围时不会尝试遵循这些最大值。这将导致您的布局出现问题。此外,paint() 方法不是更改文本字段绘图的最佳位置,因为它不理解文本换行。如果您想更改文本的绘制方式,但在执行换行之后,您想改写 drawText。

这大约是您想要的,但您需要进行更多调整以使其按您期望的方式工作:

protected void layout(int maxWidth, int maxHeight) {
    super.layout(maxWidth, Math.min(maxHeight, Font.getDefault().getHeight() * row));
    super.setExtent(maxWidth, Math.min(maxHeight, Font.getDefault().getHeight() * row));
}

public int drawText(Graphics graphics,
                int offset,
                int length,
                int x,
                int y,
                DrawTextParam drawTextParam) {
    graphics.setBackgroundColor(Color.GRAY);
    graphics.clear();
    graphics.setColor(Color.BLACK);
    int labelWidth = getFont().getAdvance(getLabel());
    graphics.drawRect(labelWidth, 0, getWidth() - labelWidth, getHeight());
    graphics.drawText(this.getText().substring(offset, offset + length), x, y);
}
于 2012-07-02T06:26:40.363 回答