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

hap*_*497 138 android landscape android-orientation

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

小智 183

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

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

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

如果你看一下VncCanvasActivity,第109行是覆盖函数:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // ignore orientation/keyboard change
  super.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)

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


如果要更改此设置,可以返回上面显示的AndroidManifest.xml文件,并将该行更改为:

<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">
Run Code Online (Sandbox Code Playgroud)

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

这可能有效,但可能会弄乱GUI的外观,具体取决于布局的创建方式.你必须考虑到这一点.此外,根据活动的编码方式,您可能会注意到,当屏幕方向发生变化时,填充到任何输入框中的值都会消失.这也可能需要处理.

  • 为什么需要`configChanges`属性呢?它似乎可以在没有它的情况下在我的非键盘手机上工作......如果你有`screenOrientation ="landscape"`但是省略`configChanges`,在什么情况下方向会变成肖像? (3认同)

has*_*man 116

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

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

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

  • 虽然这有效,但它会强制重启活动. (13认同)

anw*_*rma 40

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

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

  • 其他答案中的清单方法似乎不起作用,但@anwarma 你的方法起作用了 (2认同)

Mic*_*lis 31

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

<activity android:allowTaskReparenting=["true" | "false"]
...
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  
Run Code Online (Sandbox Code Playgroud)


avi*_*per 21

在清单中:

<activity  android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">
Run Code Online (Sandbox Code Playgroud)

在您的活动中:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
Run Code Online (Sandbox Code Playgroud)


Meg*_*gha 11

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

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

  • "orientation"如果您的应用程序的目标是API级别13或更高,那么您还应该声明"screenSize" (2认同)

jos*_*gle 7

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

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


Com*_*eIn 5

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

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
Run Code Online (Sandbox Code Playgroud)