如何捕捉BlackBerry Torch 9800 OS 6的旋转屏幕事件?
有人能告诉我怎么才能赶上这场比赛吗? 因为当我将手机旋转到横向模式时,应用程序无法正确显示。 谢谢如何捕捉BlackBerry Torch 9800 OS 6的旋转屏幕事件?,blackberry,Blackberry,有人能告诉我怎么才能赶上这场比赛吗? 因为当我将手机旋转到横向模式时,应用程序无法正确显示。 谢谢 Duy当这种情况发生时,BBUI框架会为您的屏幕调用布局(int-width,int-height)。这是因为MainScreen也是一个Manager,所以它应该在BBUI框架开始绘制之前布局所有子字段 因此,在layout()中,您可以跟踪当前的方向状态(使用net.rim.device.api.system.Display.getOrientation())并与上一个进行比较。如果它被改变了
Duy当这种情况发生时,BBUI框架会为您的屏幕调用
布局(int-width,int-height)
。这是因为MainScreen
也是一个Manager
,所以它应该在BBUI框架开始绘制之前布局所有子字段
因此,在
layout()
中,您可以跟踪当前的方向状态(使用net.rim.device.api.system.Display.getOrientation()
)并与上一个进行比较。如果它被改变了,那么设备刚刚被旋转。我想出了一种与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();
}
}
也许这对你有帮助,是的,你必须检查一下键盘是否在手电筒上滑出
问候
Alex但我们无法覆盖主屏幕中的layout()函数。在BB dev网站上,他们说:当触摸屏的方向发生变化时接收通知导入net.rim.device.api.ui.Manager类。覆盖net.rim.device.api.ui.Manager.sublayout(int,int)。受保护的void子布局(int-width,int-height){..我做了,但当我旋转屏幕时模拟器没有运行到代码中。我不知道这是模拟器问题还是什么。无论如何,谢谢,Torch 9800可能会根据其滑块是打开还是关闭而表现不同。可能只是尝试一下打开/关闭滑块。