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

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

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

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

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

如果你看VncCanvasActivity,在109行是被覆盖的function:

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

作者特别发表评论,忽略任何键盘或方向的变化。


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

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

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

这可能工作,但可能会弄乱GUI的外观,取决于如何创build布局。 你将不得不考虑这一点。 另外,根据活动的编码方式,您可能会注意到当屏幕方向发生变化时,填充到任何input框中的值将消失。 这也可能需要处理。

你也可以在你的java代码中设置相同的数据。

 myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

ActivityInfo上的其他值将让您将其设置回传感器驱动或locking的肖像。 就个人而言,我喜欢把它设置为在这个问题的另一个答案中build议的Manifest中的东西,然后在Android SDK中使用上面的调用,如果有需要的话,改变它。

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

 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

您可以指定清单中活动的方向。 看到这里 。

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

以下是我用来在横向模式下显示所有活动的代码:

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

在清单中:

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

对于AndroidManifest.xml文件来说,一个简单而快速的解决scheme是,为每个要强制横向模式的活动添加以下内容:

 android:screenOrientation="landscape" 

而已!! 长期等待这个修复。

我有一个旧的Android问题关于双启动一个需要(以编程方式)横向模式的setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

现在Android启动“横向”模式。

阿尔斯兰,为什么你要强制定位在语法上,虽然已经有一个方法在manifest <activity android:name=".youractivityName" android:screenOrientation="portrait" />

在代码中这样做是错误的,甚至更多,如果你把它放在onCreate。 在清单中做这件事,“系统”知道应用程序启动的方向。 这种types的元或顶级“指导”应该是清单。 如果你想certificate自己在Activity的onCreate中设置了一个中断。 如果您在代码中执行此操作,将会调用两次:以纵向模式启动,然后切换到横向。 如果您在清单中执行此操作,则不会发生这种情况。

对于Android 4.0 (冰淇淋三明治)和以后,我需要添加这些,除了landscape价值。

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

只使用keyboardHidden|orientation ,当按下电源button时仍然会导致内存泄漏并重新执行我的活动。

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

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

CTRL+F11旋转屏幕。