152

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

4

16 回答 16

195

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

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

此行指定screenOrientationas 横向,但作者更进一步用 覆盖任何屏幕方向更改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 的外观,具体取决于布局的创建方式。你将不得不考虑这一点。此外,根据活动的编码方式,您可能会注意到,当屏幕方向发生变化时,填充到任何输入框中的值都会消失。这也可能需要处理。

于 2010-01-27T21:55:34.723 回答
121

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

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

于 2010-01-27T21:47:18.597 回答
43

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
于 2012-04-22T17:30:08.080 回答
33

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

<activity android:allowTaskReparenting=["true" | "false"]
...
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  
于 2010-01-27T21:24:21.453 回答
28

在清单中:

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

在您的活动中:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
于 2016-01-25T16:03:03.017 回答
11

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

<activity android:screenOrientation="landscape"
          android:configChanges="orientation|keyboardHidden"
          android:name="abcActivty"/>
于 2011-10-11T05:28:41.940 回答
9

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

android:screenOrientation="landscape"
于 2015-03-16T19:45:41.493 回答
5

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

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
于 2016-08-23T23:18:00.723 回答
4

而已!!等这个修复好久了。

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

现在 Android 在启动时制作横向模式。

于 2012-09-12T10:22:17.307 回答
3

Arslan,您为什么要以编程方式强制定向,尽管清单中已经有一种方法 <activity android:name=".youractivityName" android:screenOrientation="portrait" />

于 2011-01-24T21:46:00.460 回答
2

在活动中添加以下行

您需要输入每个活动

景观

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>
于 2020-05-09T11:19:22.883 回答
1

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

于 2014-08-26T19:26:49.047 回答
0

对于Android 4.0landscape (Ice Cream Sandwich) 及更高版本,除了值之外,我还需要添加这些。

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

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

于 2013-06-15T16:03:26.430 回答
0

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

于 2020-05-27T05:40:20.367 回答
0

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
于 2017-05-18T21:23:27.890 回答
-26

按下CTRL+F11可旋转屏幕。

于 2012-10-18T12:26:59.703 回答