我正在努力完成Reto Meier推荐的保持屏幕方向不变的方法。可以在 Android Protips: Where to Download the Slides and Code Snippets 中找到他在Google IO期间的演讲中的幻灯片(请参阅#23)。
我已完成代码并设置了值,但屏幕方向仍然有所改变。仅供参考,我在应用程序中注册了这个监听器。
这是我的代码:
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);
答案 0 :(得分:12)
目前无效的所有30多行代码都可以替换为AndroidManifest.xml
文件中的某些XML值。
我们都见过
<activity android:name=".YourActivity" android:screenOrientation="portrait" ></activity>
我们都知道,对于具有默认横向方向的平板电脑,它不能很好地工作。但你们有多少人见过这个?
<activity android:name=".YourActivity" android:screenOrientation="nosensor" ></activity>
基本上它使得设备的方向不响应传感器。因此,如果您的默认值是横向或纵向,则不会更改。我已经在我的Droid X和Xoom上对其进行了测试,它的效果就像我预期的那样。
我希望这有助于其他人。