为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2019-08-16 14:50:28
Android:暂时禁用活动中的方向更改我的主要活动有一些代码,可以进行一些不应该被中断的数据库更改。我正在另一个线程中进行繁重的工作,并使用我设置为不可取消的进度对话框。但是,我注意到如果我旋转手机,它会重新启动对正在运行的进程非常不好的活动,并且我会收到强制关闭。我想要做的是以编程方式禁用屏幕方向更改,直到我的进程完成,此时方向更改已启用。
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

正如克里斯在他的自我回答中所说,打电话

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

然后

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

在真实的设备上真的像魅力一样!

在仿真器上进行测试时,不要认为它已损坏,ctrl + F11快捷方式始终改变屏幕方向,而不模拟传感器移动。

编辑:这不是最好的答案。正如评论中所解释的,这种方法存在问题。


查看完整回答
反对 回复 2019-08-16
?
千巷猫影

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);


查看完整回答
反对 回复 2019-08-16
?
莫回无

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);
    }}


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 611 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信