微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式在Android中禁用和启用方向更改

我有一个应用程序,使一些背景人员.当后台工作正在运行时,将显示圆圈,如果在此期间旋转设备,则“活动”将“重置”,我希望避免这种情况.

出于这个原因,我决定在此过程中禁用方向.我已经看到了这个问题的差异线程,但没有一个有效的解决方案,至少在我的情况下.

发布的解决方案是关于修复活动方向,但您必须处理以下事实:如果您使用以下情况,则不会返回REVERSE方向:

getResources().getConfiguration().orientation

对于PORTRAIT和REVERSE_PORTRAIT情况,上面的函数都返回SCREEN_ORIENTATION_PORTRAIT(至少在我的测试中).

所以最后我用Rotation值来处理它,所以我的代码“禁用旋转”是:

int rotation = getwindowManager().getDefaultdisplay().getRotation();

    switch(rotation) {
    case Surface.ROTATION_180:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        break;
    case Surface.ROTATION_270:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);         
        break;
    case  Surface.ROTATION_0:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;
    case Surface.ROTATION_90:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        break;
    }

并再次允许方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

这在使用Android 4.1.2的设备中完美运行,但在使用Android 4.2.1的设备中,它无法按预期工作.

我想在活动实时循环中管理轮换应该是一个常见问题,但我无法找到合适的解决方案.可能我正在寻找错误的方向,所以任何帮助都是非常受欢迎的.

提前致谢,
伊万.

解决方法

如果要禁用手机的方向更改,则可以在清单中使用此代码
<activity android:name=".class_name"

//如果你想要你的画面是纵向的

android:screenorientation="portrait" >

//如果你想在横向模式下进行屏幕显示

android:screenorientation="landscape" >

如果您希望手机改变方向但阻止进程重新启动,则可以在类中使用onConfigurationChanged方法

@Override
public void onConfigurationChanged(Configuration newConfig) {
   // ignore orientation change
   if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) {
       super.onConfigurationChanged(newConfig);
   }
}

原文地址:https://www.jb51.cc/android/315977.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐