Как отловить событие «Вращающийся экран» для BlackBerry Torch 9800 OS 6? - PullRequest
3 голосов
/ 14 июля 2011

Может кто-нибудь сказать мне, как поймать это событие? Потому что, когда я повернул телефон в альбомный режим, приложение не могло отображаться правильно. Спасибо, Зуй

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Когда это происходит, то BB UI Framework определенно вызывает layout(int width, int height) для вашего экрана. Это потому, что MainScreen также является Manager, поэтому он должен расположить все свои дочерние поля до того, как среда пользовательского интерфейса BB начнет рисовать.

Таким образом, в layout() вы можете отслеживать текущее состояние ориентации (с помощью net.rim.device.api.system.Display.getOrientation()) и сравнивать с предыдущим. Если это изменилось, то устройство только что было повернуто.

0 голосов
/ 27 июля 2011

Я придумал метод, отличный от предложенного Arhimed, и он, кажется, работает хорошо (я использую его для рисования настраиваемого поля по-другому - когда устройство наклонено). У меня есть метод

protected void myOrientation() {
    // portrait is true when dh > dw
    boolean portrait = (Display.getOrientation() == Display.ORIENTATION_PORTRAIT);
    // dw and dh = real horizontal and vertical dimensions of display - regardless of device orientation
    int dw = portrait ? Math.min(Display.getWidth(), Display.getHeight()) : Math.max(Display.getWidth(), Display.getHeight());
    int dh = portrait ? Math.max(Display.getWidth(), Display.getHeight()) : Math.min(Display.getWidth(), Display.getHeight());

    // here I draw my custom Field

    invalidate();
}

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

public class MyScreen extends MainScreen implements AccelerometerListener {

private MyScreen() {
    if (AccelerometerSensor.isSupported()) {
        orientationChannel = AccelerometerSensor.openOrientationDataChannel( Application.getApplication() );
        orientationChannel.addAccelerometerListener(this);
    }
    ....
} 


public void onData(AccelerometerData accData) {
    if (old != accData.getOrientation()) {
        myField.myOrientation();
    }
}

Может быть, это поможет вам и да - вы должны проверить, выдвинута ли клавиатура на Torch

С уважением Alex

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