我在HTC G1上使用Android VNC查看器 . 但由于某些原因,尽管我的G1处于纵向模式,但该应用程序始终处于横向模式 . 由于Android VNC查看器是开源的,我想知道如何将活动硬编码为'landscape' . 我想改变它以尊重电话方向 .
对于Android 4.0(冰淇淋三明治)以及后来,我需要添加这些,除了 landscape 值 .
landscape
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
按下电源按钮时,仅使用 keyboardHidden|orientation 仍会导致内存泄漏并重新创建活动 .
keyboardHidden|orientation
在调用setLayout方法之前,在onCreate方法中使用ActivityInfo(android.content.pm.ActivityInfo)
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
按 CTRL+F11 旋转屏幕 .
CTRL+F11
在第9行看AndroidManifest.xml(link):
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
此行将 screenOrientation 指定为横向,但作者更进一步用 configChanges="orientation|keyboardHidden" 覆盖任何屏幕方向更改 . 这指向VncCanvasActivity.java中的重写函数 .
screenOrientation
configChanges="orientation|keyboardHidden"
如果你看一下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的外观,具体取决于布局的创建方式 . 你必须考虑到这一点 . 此外,根据活动的编码方式,您可能会注意到,当屏幕方向发生变化时,填充到任何输入框中的值都会消失 . 这也可能需要处理 .
您也可以在java代码中设置相同的数据 .
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActivityInfo上的其他值将允许您将其设置回传感器驱动或锁定的纵向 . 就个人而言,我喜欢在Manifest中将其设置为此问题的另一个答案中的建议,然后在需要时使用Android SDK中的上述调用进行更改 .
在我的 OnCreate(Bundle) 中,我通常会做以下事情:
OnCreate(Bundle)
您可以在清单中指定活动的方向 . 见here .
<activity android:allowTaskReparenting=["true" | "false"] ... android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nosensor"] ... "adjustResize", "adjustPan"] >
在清单中:
<activity android:name=".YourActivity" android:screenOrientation="portrait" android:configChanges="orientation|screenSize">
在您的活动中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.your_activity_layout);
以下是我用于在横向模式下显示所有活动的代码:
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="abcActivty"/>
一个快速而简单的解决方案是AndroidManifest.xml文件,为您希望强制为横向模式的每个活动添加以下内容:
android:screenOrientation="landscape"
而已!!很久等待这个修复 .
我有一个关于双启动需要(以编程方式)横向模式的活动的旧Android问题: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
现在Android启动时进行横向模式 .
这适用于Xamarin.Android . 在OnCreate()
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
Arslan,你为什么要用语法强制定位,虽然已经有一种方法在清单 <activity android:name=".youractivityName" android:screenOrientation="portrait" />
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
在代码中执行它是IMO错误的,如果你把它放入onCreate更是如此 . 在清单中执行此操作,“系统”知道应用程序启动时的方向 . 而这种类型的元或顶级“指导”应该在清单中 . 如果你想证明自己在Activity的onCreate中设置一个休息时间 . 如果你在代码中执行它将被调用两次:它以纵向模式启动然后切换到横向 . 如果您在清单中执行此操作,则不会发生这种情况 .
14 回答
对于Android 4.0(冰淇淋三明治)以及后来,我需要添加这些,除了
landscape
值 .按下电源按钮时,仅使用
keyboardHidden|orientation
仍会导致内存泄漏并重新创建活动 .在调用setLayout方法之前,在onCreate方法中使用ActivityInfo(android.content.pm.ActivityInfo)
按
CTRL+F11
旋转屏幕 .在第9行看AndroidManifest.xml(link):
此行将
screenOrientation
指定为横向,但作者更进一步用configChanges="orientation|keyboardHidden"
覆盖任何屏幕方向更改 . 这指向VncCanvasActivity.java中的重写函数 .如果你看一下VncCanvasActivity,第109行是覆盖函数:
作者特意发表评论,忽略任何键盘或方向的变化 .
如果要更改此设置,可以返回上面显示的AndroidManifest.xml文件,并将该行更改为:
当用户旋转设备时,这应该更改程序以从纵向切换到横向 .
这可能有效,但可能会弄乱GUI的外观,具体取决于布局的创建方式 . 你必须考虑到这一点 . 此外,根据活动的编码方式,您可能会注意到,当屏幕方向发生变化时,填充到任何输入框中的值都会消失 . 这也可能需要处理 .
您也可以在java代码中设置相同的数据 .
ActivityInfo上的其他值将允许您将其设置回传感器驱动或锁定的纵向 . 就个人而言,我喜欢在Manifest中将其设置为此问题的另一个答案中的建议,然后在需要时使用Android SDK中的上述调用进行更改 .
在我的
OnCreate(Bundle)
中,我通常会做以下事情:您可以在清单中指定活动的方向 . 见here .
在清单中:
在您的活动中:
以下是我用于在横向模式下显示所有活动的代码:
一个快速而简单的解决方案是AndroidManifest.xml文件,为您希望强制为横向模式的每个活动添加以下内容:
而已!!很久等待这个修复 .
我有一个关于双启动需要(以编程方式)横向模式的活动的旧Android问题:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
现在Android启动时进行横向模式 .
这适用于Xamarin.Android . 在OnCreate()
Arslan,你为什么要用语法强制定位,虽然已经有一种方法在清单
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
在代码中执行它是IMO错误的,如果你把它放入onCreate更是如此 . 在清单中执行此操作,“系统”知道应用程序启动时的方向 . 而这种类型的元或顶级“指导”应该在清单中 . 如果你想证明自己在Activity的onCreate中设置一个休息时间 . 如果你在代码中执行它将被调用两次:它以纵向模式启动然后切换到横向 . 如果您在清单中执行此操作,则不会发生这种情况 .