Android:暂时禁用活动中的方向更改我的主要活动有一些代码,可以进行一些不应该被中断的数据库更改。我正在另一个线程中进行繁重的工作,并使用我设置为不可取消的进度对话框。但是,我注意到如果我旋转手机,它会重新启动对正在运行的进程非常不好的活动,并且我会收到强制关闭。我想要做的是以编程方式禁用屏幕方向更改,直到我的进程完成,此时方向更改已启用。
3 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
正如克里斯在他的自我回答中所说,打电话
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
然后
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
在真实的设备上真的像魅力一样!
在仿真器上进行测试时,不要认为它已损坏,ctrl + F11快捷方式始终改变屏幕方向,而不模拟传感器移动。
编辑:这不是最好的答案。正如评论中所解释的,这种方法存在问题。
千巷猫影
TA贡献1829条经验 获得超7个赞
没有其他答案对我来说完美无缺,但这就是我发现的。
锁定方向为当前......
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);} else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);当应该再次允许更改方向时,请设置回默认值...
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
莫回无
TA贡献1865条经验 获得超7个赞
这是一个更加完整和最新的解决方案,适用于API 8+,适用于反向纵向和横向,并适用于Galaxy选项卡,其中“自然”方向是横向(调用activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)解锁方向):
@SuppressWarnings("deprecation")@SuppressLint("NewApi")public static void lockActivityOrientation(Activity activity) {
Display display = activity.getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
int height;
int width;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
height = display.getHeight();
width = display.getWidth();
} else {
Point size = new Point();
display.getSize(size);
height = size.y;
width = size.x;
}
switch (rotation) {
case Surface.ROTATION_90:
if (width > height)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
break;
case Surface.ROTATION_180:
if (height > width)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
break;
case Surface.ROTATION_270:
if (width > height)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
default :
if (height > width)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}}- 3 回答
- 0 关注
- 655 浏览
添加回答
举报
0/150
提交
取消
