getOrientation() 已弃用,但这不一定是问题的根源。确实,您应该使用获取旋转()代替获取方向()但只有当您的目标是 Android 2.2(API 级别 8)或更高版本时才能使用它。有些人,甚至谷歌员工有时似乎忘记了这一点。
举个例子,我的 HTC 希望运行 Android 2.2。获取方向() and 获取旋转()两者报告相同的值:
- 0(默认,纵向),
- 1(装置逆时针90度),
- 3(装置顺时针90度)
当您将其“翻转”(旋转 180,即值 2)时,它不会报告。此结果可能是特定于设备的。
首先你应该明确你使用的是模拟器还是设备。你知道如何旋转模拟器吗?然后我建议使用 onCreate() 方法创建一个小型测试程序,如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display mDisplay = mWindowManager.getDefaultDisplay();
Log.d("ORIENTATION_TEST", "getOrientation(): " + mDisplay.getOrientation());
}
检查您的设备屏幕是否已被锁定在设备设置中 设置 > 显示 > 自动旋转屏幕。如果未选中该复选框,Android 将不会向您的 Activity 报告方向变化。需要明确的是:它不会重新启动活动。就我而言,我只得到0,就像你所描述的那样。
如果将这些行添加到,您可以从程序中检查这一点onCreate()
int sysAutoRotate = 0;
try {
sysAutoRotate = Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION);
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("ORIENTATION_TEST", "Auto-rotate Screen from Device Settings:" + sysAutoRotate);
它会返回0如果自动旋转已关闭并且1如果自动旋转已打开。
另一次尝试。在您的原始程序中,您可能已在清单中设置
android:screenOrientation="portrait"
效果相同,但这次仅针对您的活动。如果您制作了小型测试程序,这种可能性就会被消除(这就是我推荐它的原因)。
备注:是的,整个方向/旋转主题确实是一个“有趣”的主题。尝试一下,使用 Log.d(),实验,学习。