Android 获取屏幕方向,根据屏幕旋转角度判断屏幕实际方向
在使用 getResources().getConfiguration().orientation 获取屏幕方向时,可能会遇到不准确的问题。
这是因为该方法返回的是设备的自然方向,而不是屏幕的实际方向。
在某些情况下,设备的自然方向可能与屏幕的实际方向不同。例如,如果设备是横向放置的,但屏幕是纵向显示的,那么设备的自然方向将是横向,但屏幕的实际方向将是纵向。
要获取屏幕的实际方向,可以使用 getWindowManager().getDefaultDisplay().getRotation() 方法。该方法返回当前屏幕的旋转角度,可以通过判断旋转角度来确定屏幕的实际方向。
这个方法不准确(Configuration):
public static boolean isLandscrape() {
// 判断Android当前的屏幕是横屏还是竖屏。横竖屏判断
if (BaseApplication.getApplication().getResources().getConfiguration().orientation
== Configuration.ORIENTATION_PORTRAIT) {
//竖屏
return false;
} else {
//横屏
return true;
}
}
推荐使用下面的方法:
public static boolean isLandscrape() {
WindowManager windowManager = (WindowManager) BaseApplication.getApplication().getSystemService(WINDOW_SERVICE);
int rotation = windowManager.getDefaultDisplay().getRotation();
int orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
boolean isLandscape;// 是横屏
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
// 设备的自然方向是纵向
if (rotation == Surface.ROTATION_0) {
// 屏幕的实际方向也是纵向
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
isLandscape = false;
} else {
// 屏幕的实际方向是横向
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
isLandscape = true;
}
} else {
// 设备的自然方向是横向
if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
// 屏幕的实际方向也是横向
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
isLandscape = true;
} else {
// 屏幕的实际方向是纵向
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
isLandscape = false;
}
}
// setRequestedOrientation(orientation);// 设置屏幕方向
return isLandscape;
}