-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 に答える