首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中以编程方式禁用和启用活动的方向更改

在Android中以编程方式禁用和启用活动的方向更改
EN

Stack Overflow用户
提问于 2013-11-17 01:57:55
回答 4查看 21.1K关注 0票数 9

我有一个应用程序,使一些后台工作人员。当后台工作正在运行时,会显示一个进度圈,如果设备在这段时间内旋转,那么活动就是“重置”,我想避免这种情况。

出于这个原因,我决定在这个过程中禁用方向。我已经看到了这个问题的不同线索,但没有一个有有效的解决方案,至少在我的情况下是这样。

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

代码语言:javascript
运行
复制
getResources().getConfiguration().orientation

上面的函数对于纵向和REVERSE_PORTRAIT情况都返回SCREEN_ORIENTATION_PORTRAIT (至少在我的测试中是这样)。

所以在最后我使用了旋转值来处理这个问题,所以我的代码“禁用旋转”是:

代码语言:javascript
运行
复制
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;
    }

并再次允许方向:

代码语言:javascript
运行
复制
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

这在Android 4.1.2的设备上运行得很好,但在Android 4.2.1的设备上却不能像预期的那样工作。

我想在活动生命周期中管理轮换应该是一个常见的问题,但我还没有找到合适的解决方案。也许我找错了方向,所以我们真的很欢迎任何帮助。

提前谢谢你,伊万。

EN

回答 4

Stack Overflow用户

发布于 2013-11-17 02:18:09

如果您想要禁用电话的方向更改,则可以在清单中使用此代码

代码语言:javascript
运行
复制
<activity android:name=".class_name"

//如果您希望屏幕是纵向的

代码语言:javascript
运行
复制
android:screenOrientation="portrait" >

//如果您希望以横向模式进行屏幕显示

代码语言:javascript
运行
复制
android:screenOrientation="landscape" >

如果你想让你的手机改变方向,但又不想重启进程,那么你可以在你的类中使用onConfigurationChanged方法:

代码语言:javascript
运行
复制
@Override
public void onConfigurationChanged(Configuration newConfig) {
   // ignore orientation change
   if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) {
       super.onConfigurationChanged(newConfig);
   }
}
票数 13
EN

Stack Overflow用户

发布于 2013-11-17 02:10:21

试试这个..。

您的代码中没有错误。我检查了一下是对的。使用onConfigurationChanged中可能会产生差异的代码,并在下面的代码中使用另一项来禁用活动重置。

代码语言:javascript
运行
复制
<activity
    android:name="YourActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/>  
票数 1
EN

Stack Overflow用户

发布于 2013-11-17 02:07:54

您可以覆盖on onConfiguratoinChanged方法以禁用方向更改:

代码语言:javascript
运行
复制
@Override
public void onConfigurationChanged(Configuration newConfig) {
   // ignore orientation change
   if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) {
       super.onConfigurationChanged(newConfig);
   }
}

不要忘记在AndroidManifest.xml文件中启用方向更改的监听程序:

代码语言:javascript
运行
复制
<activity android:configChanges="orientation" >
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20021803

复制
相关文章

相似问题

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