强制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
旋转屏幕。