Android:防止屏幕方向在编程中自动旋转

4

我正在使用:

setRequestedOrientation(getResources().getConfiguration().orientation);

随后:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

它可以防止方向在任务完成之前改变,但它只适用于纵向模式,当应用程序处于横向模式时,它无法阻止方向更改。

有什么建议吗?
Oim~


如果您想将方向固定为纵向模式,则在清单中的每个活动中使用android:orientation=potrait。 - therealprashant
这可以帮助您以编程方式禁用旋转设备:https://dev59.com/T3A65IYBdhLWcg3w1SRC#3614089 - QArea
@therealprashant 我不是想在整个应用程序运行期间修复方向,而只是在关键任务运行时修复方向。 - Artemio Ramirez
@QArea 那个也不行,但它让我找到了实际的答案:getWindowManager().getDefaultDisplay().getRotation() 可以告诉你设备处于四个方向中的哪一个,然后你只需使用 setRequestedOrientation() 来修复它。 - Artemio Ramirez
2个回答

5

我已成功将其在所有情况下正常运作。

修复屏幕的方法:

if (getWindowManager().getDefaultDisplay().getRotation()== Surface.ROTATION_0)
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if (getWindowManager().getDefaultDisplay().getRotation()== Surface.ROTATION_90)
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
if (getWindowManager().getDefaultDisplay().getRotation()== Surface.ROTATION_270)
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);

然后再次允许旋转:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

Oim~


你在平板电脑上测试过吗?平板电脑有不同的方向。Rotation_0表示横屏。 - Oximer
抱歉回复晚了,我只在平板电脑上测试过该应用程序一次,据我记得它运行良好,但我并没有积极尝试测试。抱歉。 - Artemio Ramirez

0
在您的活动清单文件中尝试这个:
    android:screenOrientation="sensorLandscape"
    android:windowSoftInputMode="stateAlwaysHidden" 

在清单文件的应用程序标签内尝试这个。
    android:hardwareAccelerated="true"
    android:largeHeap="true"

完全相同的行为,在竖屏状态下运行良好,但在横屏状态下无法正常工作。 - Artemio Ramirez
谢谢您的尝试,但问题仍然存在,当屏幕为竖屏时它可以正常工作,但是当屏幕为横屏时却没有任何反应。我保留了之前的代码并添加了第二行。 - Artemio Ramirez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接