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

强制Android活动始终使用横向模式,android,landscape,android-orientation,Android,Landscape,Android Orientation,我正在我的电脑上使用安卓浏览器。但由于某些原因,尽管我的G1处于纵向模式,该应用程序始终处于横向模式。由于Android VNC查看器是开源的,我想知道如何将活动硬编码为“横向”。我想改变它,以尊重手机的方向 您可以在清单中指定活动的方向。看 您也可以在java代码中设置相同的数据 myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); ActivityInfo上的其他值将允许您将其设置回传感

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


您可以在清单中指定活动的方向。看


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

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

查看AndroidManifest.xml(),第9行:

<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
作者特别添加了一条注释,以忽略任何键盘或方向的更改


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

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

当用户旋转设备时,这将改变程序,使其从纵向切换到横向

这可能会起作用,但可能会搞乱GUI的外观,具体取决于布局的创建方式。你必须对此负责。此外,根据活动的编码方式,您可能会注意到,当屏幕方向改变时,填充到任何输入框中的值都会消失。这也可能需要处理。

Arslan, 为什么你想按语法强制定向,尽管在清单中已经有了一种方法

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

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

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

就这样!!我等了很久了

我有一个关于双重启动需要(以编程方式)横向模式的活动的老安卓问题:
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向)


现在Android开始使用横向模式。

按下
CTRL+F11
旋转屏幕。

对于(冰淇淋三明治)和更高版本,除了
横向
值之外,我还需要添加这些

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

仅使用
键盘隐藏|方向
仍会导致内存泄漏,并在按下电源按钮时重新创建我的活动。

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

对于AndroidManifest.xml文件,请为要强制进入横向模式的每个活动添加以下内容:

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

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

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

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
在活动中添加以下行 你需要参加每项活动

景观

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"
肖像画

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

这里是MainActivity的示例

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

为什么需要
configChanges
属性?它似乎在我的非键盘手机上工作,没有它。。。如果您有
screenOrientation=“横向”,在什么情况下方向会变为纵向
但省略
配置更改
?在新版本中,您还应该指定屏幕大小:如何强制内置活动,如仅在横向或纵向中选择系统图像库?他们现在想知道如何设置应用程序的默认方向,而不是如何旋转屏幕。emulator的CTRL+f12.im不是询问者,但也许他想通过编程强制,因为他想在某个时间强制?其他答案中的manifest方法似乎不起作用,但是@anwarma yours做了“定向”如果你的应用程序目标API级别为13或更高,那么你也应该声明“屏幕大小”,我不同意。在代码中而不是通过清单来做任何事情都是我的首选方法。基于单一责任原则,清单应该只关注应用程序级属性、权限和API绑定。事实上,我根本不同意标记出现在应用程序清单中,因此我从未将它放在那里(它工作得很好)。如何呈现活动显然是一个呈现关注点。您的活动应该完全负责它的呈现方式,因此我通常将所有呈现逻辑放在视图/活动代码中。错误做法警告!这与强制以横向模式进行活动无关。您始终需要实现活动状态的存储和重新创建。这是Android开发的基本知识。不要用这个黑补丁来解决这个问题。如果“活动”需要更多内存,则系统始终可以关闭它。@Roel,这是防止“活动”在旋转设备时返回纵向的唯一方法。它可以防止这些配置更改影响活动。很抱歉,有点生气的消息,但我对它进行了测试,我不知道横向模式下的所有这些值。当您添加所有这些值时,意味着您自己在onConfigurationChanged()中处理更改,而不是重新启动活动(您必须实现它!)
android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

<?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>