Blackberry - getPreferredWidth игнорируется в 4,5? - PullRequest
0 голосов
/ 08 января 2010

Я создал ButtonField с автоматически вычисляемой шириной. Ширина кнопки будет определяться в зависимости от того, сколько других кнопок находится в его родительском объекте HorizontalFieldManager (HFM). Так что, если есть 3 кнопки, каждая кнопка будет около 33% ширины. Если есть 5 кнопок, каждая из них будет примерно на 20% ширины и т. Д. В принципе, все кнопки имеют одинаковую ширину.

Приведенный ниже код отлично работает под JDE 4.7 (протестировано на симуляторе Storm). Но при запуске под JDE 4.5 (симулятор 8330) мое значение getPreferredWidth (), похоже, игнорируется. Ширина дисплея на обоих устройствах составляет 320, и я добавляю 4 кнопки в HFM. Ширина рассчитывается на 80, а каждая кнопка 80 под 4,7. Под 4.5 у меня 3 кнопки около 96, а последняя около 24.

Текст на каждой кнопке отличается, поэтому это может быть причиной проблемы. Вот код:

public class AutoWidthButtonField extends ButtonField
{
    AutoWidthButtonField(String label, long style) { super(label, style); }

    public int getPreferredWidth()
    {
        Manager parent = this.getManager();
        int fields = parent.getFieldCount();

        int width = (Display.getWidth() / fields);
        return width;
    }

    /*
    protected void layout(int width, int height)
    {  
        super.layout(width, height);
        setExtent(getPreferredWidth(), getPreferredHeight());
    }
    */
}

Сейчас компоновка закомментирована, но она не меняет поведение. Я использую это так:

HorizontalFieldManager nav = new HorizontalFieldManager();
nav.add(new AutoWidthButtonField("B1", ButtonField.CONSUME_CLICK));
nav.add(new AutoWidthButtonField("Opt 2", ButtonField.CONSUME_CLICK));
nav.add(new AutoWidthButtonField("Test", ButtonField.CONSUME_CLICK));
nav.add(new AutoWidthButtonField("...", ButtonField.CONSUME_CLICK));

Что я делаю не так под 4.5? Спасибо!

1 Ответ

1 голос
/ 12 января 2010

Я попробовал ваш код на 4.7, 4.6, 4.5 и 4.3, и ваш метод getPreferredWidth () возвращает то, что ожидается. Я предполагаю, что что-то не так с вашим симулятором. Например, у меня были проблемы с подключением по HTTP с этим симулятором «BlackBerry Device Simulators v4.5.0.81», но у меня не было проблем с этим «BlackBerry Device Simulators v4.5.0.52 (8310)».

Примечание. Я проверял ваш код в Eclipse и в плагине BB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...