在使用 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;}