查看 AndroidManifest.xml (链接),第 9 行:
<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的外观。您需要考虑这一点。此外,根据活动的编码方式,您可能会注意到当屏幕方向更改时,填入任何输入框中的值会消失。这也可能需要处理。
你也可以在Java代码中设置相同的数据。
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActivityInfo的其他值可以让你将其设置回传感器驱动或锁定纵向。个人而言,我喜欢将其设置为清单中建议的内容,然后在Android SDK中使用上述调用进行更改(如果需要)。
如果活动当前在前台或以其他方式影响屏幕方向,则屏幕将立即更改(可能导致活动重新启动)
。 - Chaitanya在我的OnCreate(Bundle)
中,我通常会执行以下操作:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
您可以在清单文件中指定活动的方向。请参见此处。
<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"/>
android:screenOrientation="landscape"
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
就是这样!!等了很久才得到这个修复。
我有一个旧的Android问题,涉及以编程方式要求横屏模式的双重启动活动:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
现在Android在启动时会进入横屏模式。
Arslan,为什么你想要以编程方式强制屏幕方向,虽然在清单文件中已经有一种方法了呢?
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
请注意,这里保留了HTML标签。
configChanges
属性的作用是什么?如果没有它,我的非键盘手机似乎也可以正常工作...如果省略了configChanges
,在什么情况下会将屏幕方向更改为纵向,即使你已经使用了screenOrientation="landscape"
?为确保应用程序能够正确处理配置更改(如旋转屏幕),需要使用configChanges
属性。如果忽略了这个属性,当屏幕方向被设置为横向时,某些情况下系统可能会强制将其更改为纵向。 - Timmmm如果您的应用程序针对API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明),则还应声明“screenSize”配置,因为当设备在纵向和横向方向之间切换时,它也会发生变化。
- Cel