How to Disable landscape mode in Android?

前端 未结 30 2998
Happy的楠姐
Happy的楠姐 2020-11-22 13:45

How can I disable landscape mode for some of the views in my Android app?

30条回答
  •  攒了一身酷
    2020-11-22 14:09

    How to change orientation in some of the view

    Instead of locking orientation of entire activity you can use this class to dynamically lock orientation from any of your view pragmatically:-

    Make your view Landscape

    OrientationUtils.lockOrientationLandscape(mActivity);
    

    Make your view Portrait

    OrientationUtils.lockOrientationPortrait(mActivity);
    

    Unlock Orientation

    OrientationUtils.unlockOrientation(mActivity);
    

    Orientation Util Class

    import android.app.Activity;
    import android.content.Context;
    import android.content.pm.ActivityInfo;
    import android.content.res.Configuration;
    import android.os.Build;
    import android.view.Surface;
    import android.view.WindowManager;
    
    /*  * This class is used to lock orientation of android app in nay android devices 
     */
    
    public class OrientationUtils {
        private OrientationUtils() {
        }
    
        /** Locks the device window in landscape mode. */
        public static void lockOrientationLandscape(Activity activity) {
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        }
    
        /** Locks the device window in portrait mode. */
        public static void lockOrientationPortrait(Activity activity) {
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    
        /** Locks the device window in actual screen mode. */
        public static void lockOrientation(Activity activity) {
            final int orientation = activity.getResources().getConfiguration().orientation;
            final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                    .getRotation();
    
            // Copied from Android docs, since we don't have these values in Froyo
            // 2.2
            int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
            int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
    
            // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
            if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
                SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            }
    
            if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
                if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
            } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
                if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                    activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                    activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                }
            }
        }
    
        /** Unlocks the device window in user defined screen mode. */
        public static void unlockOrientation(Activity activity) {
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
        }
    
    }
    

提交回复
热议问题