Android开发专栏Android开发

Android 屏幕旋转切换总结

2018-04-02  本文已影响0人  游戏中的龙

android:screenOrientation属性说明:

1、AndroidManifest.xml设置

  <activity
            android:name=".ManifestHorizontalActivity"
            android:screenOrientation="landscape" /><!--横屏设置-->
        <activity
            android:name=".ManifestVerticalActivity"
            android:screenOrientation="portrait" /><!--竖屏设置-->

直接如上代码设置,横屏或者竖屏是被直接定死,旋转方向不会变化,只有一个方向(意思是旋转180°也不会改变),当然就不会在手机旋转的时候重启activity。

2、代码动态设置

想要在代码中设置,就需要调用setRequestedOrientation()函数,其效果就是和在
AndroidManifest中设置一样的,当前方向和设置的方向不一致的时候,会重启activity,一致的话不会重启。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);//默认设置

如果不想activity被重启,可以在AndroidManifest中加上android:configChanges(orientation|screenSize这两个一定要加上)

 <activity
            android:name=".MainActivity"
            android:screenOrientation="sensor"
            android:configChanges="keyboardHidden|orientation|screenSize">

之后在Activity中重写onConfigurationChanged方法(如果你不需要做监听处理,可以不写)

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged");
    }

这个方法将会在屏幕旋转变化时调用,可以在这里做出我们在屏幕变化时想要的操作,并且不会重启activity。但它只能一次旋转90度,如果一下子旋转180度,onConfigurationChanged函数不会被调用。
如果想要更详细的监听旋转的角度,就要使用到OrientationEventListener,
private OrientationEventListener orientationEventListener;
在onCreate中初始化监听器

    mOrientationListener = new OrientationEventListener(this) {
            @Override
            public void onOrientationChanged(int orientation) {
                Log.d(TAG, "onOrientationChanged: " + orientation);
                if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
                    return; // 手机平放时,检测不到有效的角度
                }
                // 只检测是否有四个角度的改变
                if (orientation > 350 || orientation < 10) {
                    // 0度:手机默认竖屏状态(home键在正下方)
                    Log.d(TAG, "下");
                } else if (orientation > 80 && orientation < 100) {
                    // 90度:手机顺时针旋转90度横屏(home建在左侧)
                    Log.d(TAG, "左");
                } else if (orientation > 170 && orientation < 190) {
                    // 180度:手机顺时针旋转180度竖屏(home键在上方)
                    Log.d(TAG, "上");
                } else if (orientation > 260 && orientation < 280) {
                    // 270度:手机顺时针旋转270度横屏,(home键在右侧)
                    Log.d(TAG, "右");
                }
            }
        };

之后调用 mOrientationListener.enable();打开监听和mOrientationListener.disable();关闭监听。

上一篇下一篇

猜你喜欢

热点阅读