锁定屏幕方向(Android)

use*_*536 146 layout android orientation

可能重复:
如何在Android中禁用方向更改?

我正在编写一个使用不同内容(活动)的标签的Android应用程序.在其中一个活动中,我想将屏幕方向锁定为"Landscape"模式,但在其他活动中,我想要正常方向(根据传感器).

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
Run Code Online (Sandbox Code Playgroud)

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

Kev*_*ion 241

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

<activity android:name="MyActivity"
android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation|screenSize">
...
</activity>
Run Code Online (Sandbox Code Playgroud)

哪里MyActivity是你想留在景观之一.

android:configChanges=...线防止onResume(),onPause()从当屏幕被旋转被调用.如果没有这一行,旋转将按照您的要求保留,但仍会进行调用.

注意:keyboardHidden并且orientation是<Android 3.2(API级别13)所必需的,并且所有三个选项都需要3.2或更高版本,而不仅仅是orientation.

  • 嗯,是的,如果Activity在TabHost中运行,那么你似乎没有用.我想你可能有正确的想法使用`setRequestedOrientation`,但是尝试将调用放在`onResume`,*not*`onCreate`中,而在非横向Activity中使用`ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED`而不是`SENSOR`.我的模拟器也用传感器窃听,但未指定工作 (3认同)

小智 59

我遇到了类似的问题.

当我进入

<activity android:name="MyActivity" android:screenOrientation="landscape"></activity>
Run Code Online (Sandbox Code Playgroud)

在清单文件中,这导致该活动以横向显示.然而,当我回到以前的活动时,即使他们被设置为肖像,他们也会在lanscape中显示.但是通过添加

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

在目标活动的OnCreate部分解决问题后立即执行.所以我现在使用这两种方法.


HjK*_*HjK 33

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

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

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

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