正常的判斷屏幕方向的代碼:
/** 獲取屏幕是否是豎屏 * @return */
@SuppressLint("SwitchIntDef")
public boolean isScreenPortrait(){
int or = getRequestedOrientation();
switch (or) {
case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :// 橫屏
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
return false;
case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :// 豎屏
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
return true;
default:
return true;
}
}
但是在onConfigurationChanged
switch (newConfig.orientation) {
case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :// 橫屏
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
APP.isScreenPortrait = false;
break;
case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :// 豎屏
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
APP.isScreenPortrait = true;
break;
}
我就很隨意的這樣寫了,本來我都不想測試,我覺得一定是對的。然后跑了一下程序,發現,是錯的。我點擊去
onConfigurationChanged(Configuration newConfig) 的switch (newConfig.orientation) 這個類,發現:
/** * Overall orientation of the screen. May be one of * {@link #ORIENTATION_LANDSCAPE}, {@link #ORIENTATION_PORTRAIT}. */
public int orientation;
發現這里的值只能是#ORIENTATION_LANDSCAPE}, {@link #ORIENTATION_PORTRAIT其中的一個。啊,自己的無知。應該去點進去看看人家會傳遞回來什么信息的。然后正確的判斷是:
switch (newConfig.orientation) {
case Configuration.ORIENTATION_LANDSCAPE :// 橫屏
APP.isScreenPortrait = false;
break;
case Configuration.ORIENTATION_PORTRAIT :// 豎屏
APP.isScreenPortrait = true;
break;
}