Слушатель клавиатуры программного обеспечения BlackBerry в OS 4.5 (или более поздней версии) совместимого кода - PullRequest
3 голосов
/ 09 июня 2011

Я занимаюсь разработкой приложения, которое должно работать на устройствах с ОС 4.5 или более поздней версии. В моем приложении мне нужно знать, когда виртуальная клавиатура видна или невидима. Потому что, если виртуальная клавиатура видна, текстовая область, которую должен вводить пользователь, находится за клавиатурой. Если бы я мог определить момент изменения состояния виртуальных клавиатур, я мог бы обновить экран и переместить текстовую область в верхнее положение.

Есть ли способ сделать это?

Редактировать: следующая кнопка находится на панели состояния. Поле редактирования находится в настраиваемом горизонтальном менеджере полей.

enter image description here

Когда я касаюсь поля редактирования, открывается виртуальная клавиатура, и содержимое поля редактирования теряется.

enter image description here

Ответы [ 5 ]

2 голосов
/ 05 июля 2011

Нет способа сделать это с тем же кодом.Вам нужно разделить ваш код на две части.Один из них обрабатывает 4,5 - 4,7.Другие дескрипторы 4.7 и более поздние.

Вы можете добавить прослушиватель клавиатуры для кода 4.7 (и более поздних), который должен проверять, изменяется ли экран в непрерывном потоке.Это не хорошо, но может работать.

2 голосов
/ 02 июля 2011

У вас есть два варианта.Первый выбор лучше:

  • Выясните, какой инвариант работает с видимой или скрытой клавиатурой.Метод компоновки экрана вызывается при изменении состояния видимости клавиатуры и уменьшении вертикального размера видимой клавиатуры.Если ваши инварианты используют это преимущество, вы можете просто реализовать логику в методе макета экрана.
    В этом случае я бы предложил метод макета, который всегда удерживает кнопку «Далее» в нижней части экрана, и помещаеттекстовое поле имени пользователя в центре оставшегося пространства.

  • Используйте условную компиляцию, чтобы вы могли написать код, который ссылается на класс VirtualKeyboard в ОС 4.7+, и этот код исчезает вболее старые выпуски BlackBerry. 4 июля : под условной компиляцией я имею в виду использование препроцессора BlackBerry.

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

Это довольно сложная работа. Однако я считаю, что не существует прямого API или способа определения состояния виртуальной клавиатуры. Единственный способ - переопределить метод setLayout() и определить, были ли изменены ширина и высота экрана. А также вам нужно проверить макеты GUI вашего экрана.

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

Для этого события нет, но вы можете определить текущее состояние виртуальной клавиатуры и установить требуемое состояние.Например спрятать его

    if(VirtualKeyboard.isSupported() == true){
        VirtualKeyboard keyboard = getVirtualKeyboard();

        if(keyboard != null)
            keyboard.setVisibility(VirtualKeyboard.HIDE);
    }
0 голосов
/ 28 июня 2011

Установите стиль VERTICAL_SCROLL для менеджера, который содержит EditField, или вы можете использовать экран со стилем VERTICAL_SCROLL.При этом EditField автоматически прокручивается при отображении клавиатуры.

Используйте следующий класс, возможно, это полезно для вас:

class FocusableManager extends MainScreen implements FocusChangeListener
{
    private BasicEditField b;
    public FocusableManager() 
    {
        VerticalFieldManager vfm=new VerticalFieldManager(VERTICAL_SCROLL);
        vfm.add(new ButtonField("first"));
        b=new BasicEditField();
        b.setFocusListener(this);
        vfm.add(b);
        vfm.add(new ButtonField("second"));
        vfm.setMargin(250,0,0,0);
        add(vfm);
    }
    public void focusChanged(Field field, int eventType)
    {
        if(field==b)
        {
            if(eventType==1)//when edit field gain focus
            {
                VirtualKeyboard virtKbd;
                virtKbd =  getScreen().getVirtualKeyboard();
                virtKbd.setVisibility(VirtualKeyboard.SHOW_FORCE);
            }
            else if(eventType==3)//when edit field lost focus
            {
                VirtualKeyboard virtKbd;
                virtKbd =  getScreen().getVirtualKeyboard();
                virtKbd.setVisibility(VirtualKeyboard.HIDE_FORCE);
            }
        }
    }
}
...