Проблема в том, что 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 и иметь имя пользователя и пароль в разных строках.