Answers:
在第9行上查看AndroidManifest.xml(链接):
<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中的上述调用对其进行更改。
If the activity is currently in the foreground or otherwise impacting the screen orientation, the screen will immediately be changed (possibly causing the activity to be restarted)
以下是我用于以横向模式显示所有活动的代码:
<activity android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden"
android:name="abcActivty"/>
Arslan,为什么您要以编程方式强制定位,尽管清单中已经有一种方法
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
在代码中这样做是IMO错误的,如果将其放入onCreate中,则更是如此。在清单中执行操作,“系统”从应用程序启动时就知道了方向。并且这种类型的元或顶级“指导”应该在清单中。如果您想向自己证明这一点,请在Activity的onCreate中设置一个中断点。如果在代码中执行此操作,它将被调用两次:以纵向模式启动,然后切换为横向。如果您在清单中执行此操作,则不会发生。
对于Android 4.0(冰淇淋三明治)及更高版本,除了landscape
值之外,我还需要添加这些内容。
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
仅使用keyboardHidden|orientation
电源会在按下电源按钮时导致内存泄漏和活动恢复。
orientation|screensize
在所有情况下使用都是不够的。它将自动旋转回纵向。
仅使用
android:screenOrientation =“ portrait”工具:ignore =“ LockedOrientationActivity”
您需要输入每个活动
用于景观
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>
configChanges
需要该属性?这似乎是我的非键盘手机,没有它的工作......在什么情况下会更改方向为纵向,如果你有screenOrientation="landscape"
,但省略了configChanges
?