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

时间:2010-01-27 21:14:36

标签: android landscape android-orientation

我在VNC上使用Android HTC G1查看器。但由于某些原因,尽管我的G1处于纵向模式,但该应用程序始终处于横向模式。由于Android VNC查看器是开源的,我想知道如何将活动硬编码为“风景”。我想改变它以尊重电话方向。

16 个答案:

答案 0 :(得分:178)

在第9行查看AndroidManifest.xml(link):

<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的外观,具体取决于布局的创建方式。你必须考虑到这一点。此外,根据活动的编码方式,您可能会注意到,当屏幕方向发生变化时,填充到任何输入框中的值都会消失。这也可能需要处理。

答案 1 :(得分:113)

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

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo上的其他值可让您将其设置回传感器驱动或锁定的肖像。就个人而言,我喜欢按照此问题的另一个答案的建议将其设置为Manifest中的某些内容,然后在需要时使用Android SDK中的上述调用进行更改。

答案 2 :(得分:39)

在我的OnCreate(Bundle)中,我通常会执行以下操作:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

答案 3 :(得分:31)

您可以在清单中指定活动的方向。请参阅here

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

答案 4 :(得分:19)

在清单中:

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

在您的活动中:

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

答案 5 :(得分:10)

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

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

答案 6 :(得分:7)

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

android:screenOrientation="landscape"

答案 7 :(得分:5)

适用于Xamarin.Android。在OnCreate()

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

答案 8 :(得分:4)

就是这样!很久等待这个修复。

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

现在,Android在启动时进行横向模式。

答案 9 :(得分:3)

阿尔斯兰, 你为什么要用语法强制定位,尽管已经有了一种方法 <activity android:name=".youractivityName" android:screenOrientation="portrait" />

答案 10 :(得分:1)

在代码中执行此操作是IMO错误的,如果将其放入onCreate中则更是如此。在清单和&#34;系统&#34;中进行。知道从应用程序启动的方向。而这种类型的元或顶级&#34;指导&#34;应该在清单中。如果你想证明自己在活动中创造一个休息时间。如果你在代码中执行它将被调用两次:它以纵向模式启动然后切换到横向。如果你在清单中这样做,就不会发生这种情况。

答案 11 :(得分:1)

在活动中添加以下行

您需要输入每个活动

对于风景

np.array2string

肖像

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

此处是MainActivity的示例

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

答案 12 :(得分:0)

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

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

按下电源按钮时,仅使用keyboardHidden|orientation仍会导致内存泄漏和重新创建活动。

答案 13 :(得分:0)

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

答案 14 :(得分:0)

仅使用
android:screenOrientation =“ portrait” 工具:ignore =“ LockedOrientationActivity”

答案 15 :(得分:-25)

CTRL+F11旋转屏幕。