Blackberry - нарисовать ярлык в центре пользовательского ButtonField? - PullRequest
3 голосов
/ 26 октября 2009

Я создал CustomButtonField в BlackBerry, используя его, чтобы иметь возможность установить собственную высоту и ширину кнопки. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как показать метку в центре кнопки.

1 Ответ

3 голосов
/ 27 октября 2009

Вы можете использовать метод рисования для изменения макета, цвета и шрифта этикетки.
альтернативный текст http://img9.imageshack.us/img9/8017/custombutton.jpg
Смотрите пример:

class CustomButton extends ButtonField {
    int mHeight;
    int mWidth;

    public CustomButton(int height, int width, String label) {
        super(label, CONSUME_CLICK);
        mHeight = height;
        mWidth = width;
    }

    public int getPreferredHeight() {
        return mHeight;
    }

    public int getPreferredWidth() {
        return mWidth;
    }

    protected void layout(int width, int height) {
        super.layout(mWidth, mHeight);
        setExtent(mWidth, mHeight);
    }

    protected void paint(Graphics graphics) {
        graphics.setColor(Color.WHITE);
        String label = getLabel();
        int x = (getPreferredWidth() - getFont().getAdvance(label)) >> 1;
        int y = (getPreferredHeight() - getFont().getHeight()) >> 1;
        graphics.drawText(label, x, y);
    }
}

Пример использования:

class Scr extends MainScreen implements FieldChangeListener {
    CustomButton button1;
    CustomButton button2;
    CustomButton button3;

    public Scr() {
        add(button1 = new CustomButton(15, 60, "first"));
        button1.setChangeListener(this);
        add(button2 = new CustomButton(30, 120, "second"));
        button2.setChangeListener(this);
        add(button3 = new CustomButton(50, 200, "third"));
        button3.setChangeListener(this);
    }

    public void fieldChanged(Field field, int context) {
        if (field == button1)
            Dialog.inform("first");
        if (field == button2)
            Dialog.inform("second");
        if (field == button3)
            Dialog.inform("third");
    }

}
...