在Android中锁定屏幕方向

3

当设备旋转时,我希望我的活动不会旋转。 使用以下代码:

android:screenOrientation="nosensor"

禁用方向更改,但有一个注意点:活动会切换到纵向模式。我只想保持当前方向(例如,如果在启动活动时屏幕处于横向模式,则即使设备旋转,也要保持横向模式)。这不是“nosensor”似乎正在做的。它似乎只是与“portrait”完全相同的行为。我使用错了吗?
我尝试使用 setRequestedOrientation(getRequestedOrientation),但如果当前请求的方向未定义,则我的活动将旋转。我只想“锁定”有效的屏幕旋转。
1个回答

3
你可以告诉Android你将自己处理方向配置更改。你可以通过在activity标签的android:configChanges属性中指定orientation来实现。请注意保留HTML标记。
<activity android:name=".MyActivity"
          android:configChanges="orientation"
          android:label="@string/app_name">

请参阅此链接以获取更多信息。 http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange 为什么“nosensor”无法正常工作,因为文档中如下所述。
定向是在不考虑物理方向传感器的情况下确定的。传感器被忽略,因此显示屏不会根据用户移动设备的方式进行旋转。除了这一区别外,系统使用与“未指定”设置相同的策略选择方向。
至于文档中的“未指定”是什么
默认值。系统选择方向。它使用的策略,因此特定上下文中做出的选择可能因设备而异。

一旦我覆盖了 onConfigurationChanged 方法,怎样防止屏幕旋转?据我所知,它允许我在配置更改时执行额外的操作,但不能替换现有的行为。如果我删除对 super.onConfigurationChanged 的调用,会出现异常。我的目标是类似于 https://dev59.com/F2w15IYBdhLWcg3wcrhC?rq=1 的可靠解决方案。 - user1924406
你尝试过在标签中保留android:configChanges="orientation",但不要覆盖onConfigurationChanged事件吗? - Ranhiru Jude Cooray
是的。这意味着让super.onConfigurationChanged处理事件,这意味着显示屏将会旋转。 - user1924406

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