Android 判斷屏幕方向一個大坑


正常的判斷屏幕方向的代碼:

    /** 獲取屏幕是否是豎屏 * @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;
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM