首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android:暂时禁用活动中的方向更改

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

Stack Overflow用户
提问于 2010-09-01 01:11:27
回答 16查看 84K关注 0票数 122

我的主要活动有一些代码,这些代码进行了一些不应该被中断的数据库更改。我在另一个线程中做繁重的工作,并使用一个我设置为不可取消的进度对话框。然而,我注意到,如果我旋转我的手机,它会重新启动活动,这对正在运行的进程非常不利,我得到了Force Close。

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

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2010-09-01 08:02:58

正如克里斯在他的self-answer中所解释的那样,调用

代码语言:javascript
复制
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

然后

代码语言:javascript
复制
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

真的很有魅力。在真实的设备上!

在模拟器上测试时不要认为它坏了,ctrl+F11快捷键总是改变屏幕方向,而不是模拟传感器的移动。

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

票数 169
EN

Stack Overflow用户

发布于 2010-11-06 07:37:22

其他答案对我来说都不是完美的,但我发现它做到了这一点。

将方向锁定为当前...

代码语言:javascript
复制
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

当应该再次允许更改方向时,请重新设置为默认值...

代码语言:javascript
复制
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
票数 45
EN

Stack Overflow用户

发布于 2013-05-17 08:23:34

这是一个更完整和最新的解决方案,适用于API 8+,适用于反转纵向和横向,并适用于“自然”方向为横向的银河标签(调用activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)解锁方向):

代码语言:javascript
复制
@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);
    }
}
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3611457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档