답변:
9 번 라인 에서 AndroidManifest.xml ( link )을 살펴보십시오 .
<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의 다른 값을 사용하면 센서 구동 또는 잠금 초상화로 다시 설정할 수 있습니다. 개인적으로, 나는이 질문에 대한 또 다른 대답에서 제안 된대로 Manifest의 무언가로 설정하고 나중에 필요한 경우 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)
빠르고 간단한 해결책은 AndroidManifest.xml 파일을위한 것입니다. 가로 모드로 설정하려는 각 활동에 대해 다음을 추가하십시오.
android:screenOrientation="landscape"
Arslan, 왜 명시 적으로 방법이 있지만 문법적으로 방향을 문법적으로 강제하고 싶습니까?
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
코드로 작성하는 것은 IMO 잘못이며 onCreate에 넣으면 훨씬 더 그렇습니다. 매니페스트에서이 작업을 수행하면 "시스템"은 앱 시작시 방향을 알고 있습니다. 그리고 이러한 유형의 메타 또는 최상위 "지침"이 명시 적이어야합니다. 스스로 그것을 증명하고 싶다면 활동의 onCreate에서 휴식을 설정하십시오. 코드로 작성하면 두 번 호출됩니다. 세로 모드에서 시작한 다음 가로로 전환됩니다. 매니페스트에서 수행하면 발생하지 않습니다.
내용은 안드로이드 4.0 (아이스크림 샌드위치) 이상, 나는 외에, 다음을 추가하는 데 필요한 landscape
값.
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
keyboardHidden|orientation
전원 버튼을 누를 때만 계속 사용하면 메모리 누수가 발생하고 활동이 재현됩니다.
orientation|screensize
는 충분하지 않았습니다. 다시 세로로 자동 회전합니다.
모든 활동에 참여해야합니다
풍경을 위해
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
?