Blackberry и Editfields - PullRequest
       7

Blackberry и Editfields

1 голос
/ 19 июня 2011

Это очень простая вещь, но я не могу найти ответ, ищущий тогда net.

В основном у меня проблемы с отображением двух EditFields рядом друг с другом в HorizontalFieldManager.

IИсходя из того, что я прочитал, EditField использует максимальную ширину контейнера, в котором он находится. Имея это в виду, я подумал, что добавление editFields для разделения VerticalFieldManager и последующее добавление их в мой HorizontalFieldManager будет работать.Ниже приведен код, которым я занимаюсь.Но, к сожалению, userName показывает нормально, но поле пароля не отображается.Любые идеи о том, что я делаю не так?

            HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.USE_ALL_WIDTH));        
    VerticalFieldManager vfmUser = new VerticalFieldManager();
    VerticalFieldManager vfmPassw = new VerticalFieldManager(;

    userName = new EditField("Username:", "", 5, EditField.FIELD_LEFT);
    password = new PasswordEditField("Pass: ", "", 5, PasswordEditField.FIELD_RIGHT);

    vfmUser.add(userName);
    vfmPassw.add(password);

    hfm.add(vfmUser);
    hfm.add(vfmPassw);
    add(hfm);

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Проблема в том, что EditField по-прежнему будет пытаться использовать всю ширину, что заставляет VerticalFieldManager также использовать всю доступную ему ширину, эффективно вытесняя поле пароля.

Единственный способ, которым я знаю, чтобы сделать что-то подобное, - это создать классы, которые явно устанавливают свою ширину равной 50% экрана. Есть два способа сделать это: либо создать подклассы EditField и PasswordEditField, либо создать подкласс от HorizontalFieldManager. Первый вариант будет проще и надежнее на разных платформах, но потребует два класса вместо одного.

Для этого вам нужно создать подкласс EditField и переопределить его layout метод, чтобы он выглядел примерно так:

protected void layout(int maxWidth, int maxHeight) {
    super.layout(maxWidth, maxHeight);
    this.setExtent(Display.getWidth()/2, this.getHeight());
}

Аналогично для PasswordEditField.

В зависимости от того, как вы хотите, чтобы он вел себя, вам может потребоваться переопределить и другие методы. Например, этот код (я уверен, не проверял его специально) приведет к усечению любых дополнительных символов, если они не помещаются в нужную область. Если это не то, что вам нужно, вам, возможно, придется переопределить paint или изменить макет на основе текущего текста. Кроме того, вы должны проверить его при наклоне штормового экрана, чтобы убедиться, что размер корректно обновляется - он должен работать в большинстве случаев, но есть ошибка, из-за которой он не обновляет макеты / размеры, если на экране есть определенные конфигурации менеджеров.

Если вы решите пойти по пути менеджера (что, опять же, я не особо рекомендую, так как вы, вероятно, столкнетесь со многими другими проблемами), вы захотите расширить либо Manager, либо HorizontalFieldManager (может быть проще сделайте первое, чтобы вам не приходилось иметь дело с некоторыми причудами HFM), и переопределите его sublayout метод. В этом методе вам нужно будет вызывать layoutChild и setPositionChild (в таком порядке) для каждого поля в менеджере (в вашем случае, поля пользователя и поля пароля). Затем, в конце, вы захотите позвонить setExtent. Я хотел бы отослать вас к документам Blackberry по этому вопросу, но, честно говоря, вам лучше искать способы реализации пользовательских менеджеров Blackberry или задавать вопросы по SO.

Все, что сказано, вы также можете пересмотреть, почему вы хотите это сделать. По своему опыту могу гарантировать, что будут некоторые телефоны, в которых пользовательский интерфейс выглядит неправильно - мы однажды попробовали подобный подход и в итоге отказались от него, потому что не смогли заставить его работать с точки зрения пользовательского интерфейса на всех устройствах. Есть много разных разрешений - некоторые очень узкие, некоторые очень широкие - и если вы воспользуетесь этим пользовательским интерфейсом, то на некоторых устройствах будет очень тесный вход в систему. ИМХО, было бы предпочтительным быть совместимым с другими приложениями BlackBerry и иметь имя пользователя и пароль в разных строках.

0 голосов
/ 09 апреля 2014

HorizontalFieldManager hfm = new HorizontalFieldManager ();

       userName = new EditField("Username:", "", 5, EditField.FIELD_LEFT)
       {
           protected void layout(int maxWidth, int maxHeight) {
                super.layout(maxWidth, maxHeight);
                this.setExtent(Display.getWidth()/2, this.getHeight());
            }
       }
       ;
       password = new PasswordEditField("Pass: ", "", 5, PasswordEditField.FIELD_RIGHT)

       {
           protected void layout(int maxWidth, int maxHeight) {
                super.layout(maxWidth, maxHeight);
                this.setExtent(Display.getWidth()/2, this.getHeight());
            }
       };


       hfm.add(userName);
       hfm.add(password);

       add(hfm);

попробуйте этот код. Я буду решением вашей проблемы.

...