有两种方法设置android禁止横屏
1.java代码
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
2.xml设置
误区,其实这两个代码都不是禁止横屏的,可以说根本没有禁止横屏的代码,这两个代码是设置竖屏的。
并且安卓先检测xml代码,如果是竖屏就直接展示竖屏的,但是如果java代码中设置的横屏,他会先展示竖屏咱展示横屏的 。
知道了这个,我们就好解决问题了。
我的问题是,我再baseActivity统一设置了java代码竖屏的代码。
结果我是手机调成可横竖屏模式,在横屏打开的情况下,我们能清楚的看到屏幕显示由横屏然后转换到了竖屏的。
这就尴尬了。
我有一个异步操作ui的,结果就报错了。
最后我给每个xml上都加上了竖屏的代码,这样就没问题了
下面我们介绍一个操作横竖屏的方法的例子。
参考链接 Android 手动设置屏幕方向后不能自动转屏问题
如题,Android在手动设置屏幕方向后不能使用自动转屏了,这是因为手动设置屏幕方向
如:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
相当于在Manifest文件中Activity节点下配置了:
android:screenOrientation="landscape"
这会导致该Activity方向锁定,不能自动转屏。But,手动转屏是可以的,所以我们只需要加上方向改变监听,然后手动转屏,也就达到了自动转屏的目的:
class OrientationEventListenerImpl extends OrientationEventListener { public OrientationEventListenerImpl(Context context) { super(context); } @Override public void onOrientationChanged(int rotation) { Log.i("旋转角度:","rotation = "+rotation); //以下代码可以根据具体需求去配置 // 设置为竖屏 if (((rotation >= 0) && (rotation <= 45)) || (rotation >= 315)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } // 设置为横屏 if(((rotation >= 225) && (rotation <= 315))) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } //设置为横屏(逆向) if(((rotation >= 45) && (rotation <= 135))) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } } }
然后再注册该监听器,比如在Activity的onCreate()方法中注册:
OrientationEventListenerImpl orientationEventListenerImpl = new OrientationEventListenerImpl(this); orientationEventListenerImpl.enable();
这样就可以实现自动转屏了。上面代码只实现了在3个方向上转屏,没有写逆向的竖直方向(一般都不会用到这个方向吧),如有需要可以自己加上,角度请自己计算,其方向常量为:
ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
通过以上的代码,还可以再配合
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); }
就可达到自由控制屏幕显示方向的目的。