【问题标题】:Lock screen orientation (Android) [duplicate]锁定屏幕方向(Android)[重复]
【发布时间】:2011-06-08 05:25:33
【问题描述】:

我正在编写一个使用具有不同内容(活动)的选项卡的 android 应用程序。 在其中一项活动中,我想将屏幕方向锁定为“横向”模式, 但在其他活动中,我想要正常的方向(根据传感器)。

我现在正在做的是我正在打电话

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

当我切换到横向模式活动时,

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

当我切换回其他活动时。但是,这似乎不起作用, 整个应用程序锁定。解决这个问题的正常方法是什么?

【问题讨论】:

  • “可能重复”链接不是与此问题重复的问题。这个问题是问如何锁定方向,使其不能从横向改变。链接的问题是询问如何在方向发生变化时防止应用程序重新启动
  • 这似乎是你想要的:从github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… 致电Screen.lockOrientation(this) 和后来的Screen.unlockOrientation(this)
  • 请注意,如果您使用的是内联 ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT,则在 4.3 以下是不允许的。然后您可以使用上述或 ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
  • 对于未来的读者,@caw 的方法在常规 Android 应用程序的上下文中不是可访问的方法。
  • @LoungeKatt 不,不是,但我确实链接到了实现,不是吗?无论如何,我只是看到该链接不再有效。这是Screen.lockOrientationScreen.unlockOrientation 源的更新链接:github.com/delight-im/Android-Commons/blob/…

标签: android layout orientation


【解决方案1】:

在 Manifest 中,您可以将 screenOrientation 设置为横向。它在 XML 中看起来像这样:

<activity android:name="MyActivity"
android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation|screenSize">
...
</activity>

MyActivity 是您想要留在横向的位置。

android:configChanges=... 行防止在屏幕旋转时调用onResume()onPause()。如果没有这条线,轮换将按照您的要求保持不变,但仍会进行调用。

注意:keyboardHidden 和orientation,并且所有三个选项都需要 3.2 或更高版本,而不仅仅是orientation

【讨论】:

  • 它似乎不起作用;我错过了什么吗?
  • 嗯,你说得对,如果 Activity 在 TabHost 内运行,这似乎不起作用。我认为您使用setRequestedOrientation 可能有正确的想法,但请尝试将呼叫置于onResumenot onCreate,并在非横向活动中使用ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED 而不是@987654333 @。我的模拟器也被传感器干扰了,但未指定工作
  • 有什么方法可以定义服务的方向……基本上我写了一个 LiveWallpaper 服务……需要限制设备方向的地方。
  • 这只会顺时针旋转我的屏幕,如何逆时针旋转?
  • 感谢@KevinDion 它对我有用
【解决方案2】:

我遇到了类似的问题。

当我进入时

<activity android:name="MyActivity" android:screenOrientation="landscape"></activity>

在清单文件中,这导致该活动以横向显示。但是,当我返回之前的活动时,即使它们设置为纵向,它们也会以横向显示。但是通过添加

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在目标活动的 OnCreate 部分解决问题后立即。所以我现在两种方法都用了。

【讨论】:

  • 请注意,如果您使用的是 ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT,则在 4.3 以下是不允许的。然后您可以使用上述或 ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
  • 警告:使用 setRequestedOrientation() 会导致 Activity 重启,触发 onResume 等两次。将此添加到您的清单中,为您执行此操作以避免它的每个活动:android:configChanges="keyboardHidden|orientation|screenSize"
【解决方案3】:

在你的项目的Android清单文件中,找到你想要修复其方向的活动声明并添加以下代码,

android:screenOrientation="landscape"

横向和纵向添加以下代码,

android:screenOrientation="portrait"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2011-04-16
    • 2011-10-18
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多