我正在尝试实现Reto Meier推荐的保持屏幕方向不变的方法。他在Google IO期间的演讲中提到了这个方法(参见#23),可以在Android Protips: Where to Download the Slides and Code Snippets中找到幻灯片。
我已经逐步检查了代码并设置了值,但是屏幕方向仍然会改变。顺便说一下,我在应用程序中注册了此侦听器。
以下是我的代码:
final SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sm.registerListener(
new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
final WindowManager wm = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
final Display display = wm.getDefaultDisplay();
int x = SensorManager.AXIS_X;
int y = SensorManager.AXIS_Y;
switch (display.getRotation()) {
case Surface.ROTATION_90:
x = SensorManager.AXIS_Y;
y = SensorManager.AXIS_MINUS_X;
break;
case Surface.ROTATION_180:
y = SensorManager.AXIS_MINUS_Y;
break;
case Surface.ROTATION_270:
x = SensorManager.AXIS_MINUS_Y;
y = SensorManager.AXIS_MINUS_X;
break;
case Surface.ROTATION_0:
default:
break;
}
SensorManager.remapCoordinateSystem(sensorEvent.values, x, y, new float[] {});
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_NORMAL);
android:screenOrientation="nosensor"
无效? - bytebender