以编程方式启用/禁用Android中的屏幕旋转

jam*_*esh 12 android preferences screen-orientation

我有一个应用程序,显示大量的文本供用户阅读.

我发现躺下时读书时,即使我的头和屏幕对齐,我仍然对屏幕旋转感到恼火.

我不想将它设置为永久处于纵向模式,所以我认为这将排除设置的方法

 android:screenOrientation="portrait"
Run Code Online (Sandbox Code Playgroud)

在清单中.

理想情况下,我想通过首选项页面启用/禁用自动方向更改.

什么是我最好的方法?

ian*_*sme 18

我会通过让我的首选项页面写入我的应用程序的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);
    }
Run Code Online (Sandbox Code Playgroud)

这可以是onCreate()或者onResume()方法.不在方法中使用它的唯一原因onCreate()是,如果在此活动中更改了设置,或者在完成后将返回到此活动的子活动.

编辑:

好吧,如果这不起作用(我不确定它会),也许你可以尝试使用两个不同的布局xml文件 - 一个设置screenOrientation,另一个没设置.加载活动/视图时,您可以根据保存的首选项动态加载其中一个.这是令人讨厌的不干净,但它应该工作.

  • 你的第一种方法有效.我添加了一些代码来说明.谢谢 (2认同)