Android:暂时禁用活动中的方向更改

Android:暂时禁用活动中的方向更改

我的主要活动有一些代码,可以进行一些不应该被中断的数据库更改。我正在另一个线程中进行繁重的工作,并使用我设置为不可取消的进度对话框。但是,我注意到如果我旋转手机,它会重新启动对正在运行的进程非常不好的活动,并且我会收到强制关闭。

我想要做的是以编程方式禁用屏幕方向更改,直到我的进程完成,此时方向更改已启用。


月关宝盒
浏览 612回答 3
3回答

郎朗坤

正如克里斯在他的自我回答中所说,打电话setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);然后setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);在真实的设备上真的像魅力一样!在仿真器上进行测试时,不要认为它已损坏,ctrl + F11快捷方式始终改变屏幕方向,而不模拟传感器移动。编辑:这不是最好的答案。正如评论中所解释的,这种方法存在问题。

千巷猫影

没有其他答案对我来说完美无缺,但这就是我发现的。锁定方向为当前......if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);} else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);当应该再次允许更改方向时,请设置回默认值...setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

莫回无

这是一个更加完整和最新的解决方案,适用于API 8+,适用于反向纵向和横向,并适用于Galaxy选项卡,其中“自然”方向是横向(调用activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)解锁方向):@SuppressWarnings("deprecation")@SuppressLint("NewApi")public&nbsp;static&nbsp;void&nbsp;lockActivityOrientation(Activity&nbsp;activity)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Display&nbsp;display&nbsp;=&nbsp;activity.getWindowManager().getDefaultDisplay(); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;rotation&nbsp;=&nbsp;display.getRotation(); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;height; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;width; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Build.VERSION.SDK_INT&nbsp;<&nbsp;Build.VERSION_CODES.HONEYCOMB_MR2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;=&nbsp;display.getHeight(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;=&nbsp;display.getWidth(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;size&nbsp;=&nbsp;new&nbsp;Point(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display.getSize(size); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;=&nbsp;size.y; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;=&nbsp;size.x; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(rotation)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Surface.ROTATION_90: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(width&nbsp;>&nbsp;height) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Surface.ROTATION_180: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(height&nbsp;>&nbsp;width) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Surface.ROTATION_270: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(width&nbsp;>&nbsp;height) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(height&nbsp;>&nbsp;width) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android