强制 Android 活动始终使用横向模式

我正在使用我的 HTC G1上的 Android VNC查看器。但出于某种原因,该应用程序总是在横向模式,尽管我的 G1是在纵向模式。由于 Android VNC 查看器是开源的,我想知道如何硬编码一个活动是“景观”。我想改变它,以尊重手机的方向。

323995 次浏览

可以在清单中指定活动的方向。参见 给你

<activity android:allowTaskReparenting=["true" | "false"]
...
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nosensor"]
...
"adjustResize", "adjustPan"] >

您也可以在 Java 代码中设置相同的数据。

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo 上的其他值将允许您将其设置回传感器驱动或锁定的纵向。就我个人而言,我喜欢按照对这个问题的另一个回答中的建议,将它设置为 Manifest 中的某个内容,然后如果需要的话,稍后在 Android SDK 中使用上面的调用进行更改。

查看第9行的 AndroidManifest.xml (链接) :

<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">

这一行将 screenOrientation指定为横向,但作者进一步用 configChanges="orientation|keyboardHidden"覆盖任何屏幕方向变化。这指向 VncCanvasActivity.java 中重写的函数。

如果您查看 VncCanvasActivity,第109行是被覆盖的函数:

@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation/keyboard change
super.onConfigurationChanged(newConfig);
}

作者特意添加了一条注释来忽略任何键盘或方向的更改。


如果您想改变这一点,您可以返回到上面显示的 AndroidManifest.xml 文件,并将行更改为:

<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">

这应该改变程序切换从纵向到横向时,用户旋转设备。

这可能有效,但是可能会影响 GUI 的外观,这取决于布局是如何创建的。你必须对此负责。此外,根据活动的编码方式,您可能会注意到,当屏幕方向改变时,填充到任何输入框中的值都会消失。这也可能需要处理。

阿斯兰, 你为什么要强制定向程序,虽然已经有一个方法在清单 <activity android:name=".youractivityName" android:screenOrientation="portrait" />

以下是我用来显示景观模式下所有活动的代码:

<activity android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden"
android:name="abcActivty"/>

在我的 OnCreate(Bundle)课程中,我通常会做以下事情:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

就是这样! ! 等这个解决办法等了很久了。

我有一个关于双重启动需要(程序化)横向模式的活动的 Android 老问题: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

现在 Android 开始使用横向模式。

CTRL+F11旋转屏幕。

对于 安卓4.0(冰淇淋三明治)和更高版本,除了 landscape值之外,我还需要添加这些值。

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

仅使用 keyboardHidden|orientation仍然会导致内存泄漏,并在按下电源按钮时重现我的活动。

用代码做这件事是错误的,如果将其放入 onCreate 中,则更是如此。在清单中执行,“系统”从应用程序启动时就知道方向。这种类型的元或顶级“指导”应该在清单中。如果您想要证明给自己看,请在活动的 onCreate 中设置一个中断。如果你在代码中这样做,它将被调用两次: 它启动在肖像模式,然后切换到横向。如果您在清单中这样做,就不会发生这种情况。

对于 AndroidManifest.xml 文件,一个快速而简单的解决方案是为您希望强制进入横向模式的每个活动添加以下内容:

android:screenOrientation="landscape"

货单上写着:

<activity  android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">

在你的活动中:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);

这适用于 Xamarin. Android. 在 OnCreate ()中

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;

在调用 setLayout 方法之前,在 onCreate 方法中使用 ActivityInfo ( android.content.pm . ActivityInfo)

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

在活动中添加以下行

你需要输入每个活动

景观

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

做肖像

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"


这里是 MainActivity 的例子

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.thcb.app">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">


<activity android:name=".MainActivity"
android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


<activity android:name=".MainActivity2"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

只可使用
屏幕方向 = “肖像” 工具: 忽略 = “ LockedOrientationActivity”