在安卓中编程实现启用/禁用屏幕旋转。

12
我有一个应用程序,需要用户阅读大量的文本。
我发现在躺着读书时,即使我的头和屏幕是对齐的,屏幕仍然会旋转,这让我很烦恼。
我不想将其永久设置为纵向模式,因此我认为这将排除设置...的方法。
 android:screenOrientation="portrait"

在清单文件中。

理想情况下,我希望通过偏好设置页面启用/禁用自动方向更改。

我的最佳方法是什么?

2个回答

19

我会通过让我的首选项页面写入应用的SharedPreferences,然后读取该值并在加载或显示相关文本视图时从代码中调用Activity.setRequestedOrientation()来实现。

例如:

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if (prefs.getBoolean("fix_orientation_to_portrait", false)) {
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else {
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    }

这可以在 onCreate() 或者 onResume() 方法中实现。只有当该设置的更改发生在此活动中或在子活动上,而后者完成后会返回到此活动时,才不应将其放在 onCreate() 方法中。

编辑:

好吧,如果那行不通(我真的不确定),也许你可以尝试使用两个不同的布局XML文件 - 一个带有设置了屏幕方向,另一个没有。当您加载您的 Activity / View 时,可以根据保存的首选项动态地加载其中一个。这样做不太优美,但应该有效。


我相信你已经尝试过了,但是出于好奇 - 为什么它不起作用?我本来以为调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)等同于在问题中提到的添加代码行。 (还有SCREEN_ORIENTATION_NOSENSOR)。 - EboMike
我没有尝试过 - 设置一个新项目并完成这些工作非常麻烦...我只是在 StackOverflow 上做一些日终的刷屏。我相信 Jamesh 说它不起作用,但现在你提到了它,他当时是在假设情况下说的。我会相应地进行编辑... - iandisme
2
你的第一种方法可行。我添加了一些代码来说明。谢谢。 - jamesh
1
将近4年过去了,但我想为其他人补充一下,您可以使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED)锁定当前方向。我尝试设置NONSENSOR,但如果我处于横屏模式,它会在锁定之前恢复到纵向(应用程序默认值?)。在KitKat上进行了测试。 - Toerndev

2
在 onCreate() 函数中添加这行代码。它可以正常工作...
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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