Development/Android

안드로이드 가로모드(혹은 세로모드) 고정하는 방법.

Jamie 2020. 9. 5. 21:17
반응형

안드로이드에서 가로모드 혹은 세로모드로 액티비티를 고정해야할일이 있습니다. 다음과 같은 방법을 사용합니다.

 

1. AndroidManifest.xml에 Activity Tag에 고정

  • activity에 screenOrientation 속성에 값을 넣어서 모드를 처리.
  • android:screenOrientation="landscape"
    <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">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

다음과 같은 속성값을 지정할 수 있습니다. 안드로이드 developers의 가이드를 참고하면 됩니다.

developer.android.com/guide/topics/manifest/activity-element

android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
"unspecified" 기본값입니다. 시스템이 방향을 선택합니다. 시스템이 사용하는 정책과 특정 컨텍스트에서 이루어지는 선택은 기기마다 다를 수 있습니다.
"behind" 액티비티 스택에서 바로 아래에 있는 액티비티와 동일한 방향입니다.
"landscape" 가로 방향입니다(디스플레이의 높이보다 너비가 더 긺).
"portrait" 세로 방향입니다(디스플레이의 너비보다 높이가 더 긺).
"reverseLandscape" 정상적인 가로 방향에서 반대 방향인 가로 방향입니다. API 레벨 9에서 추가되었습니다.
"reversePortrait" 정상적인 세로 방향에서 반대 방향인 세로 방향입니다. API 레벨 9에서 추가되었습니다.
"sensorLandscape" 기기 센서에 따라 정상적인 가로 방향 또는 반전된 가로 방향이 될 수 있습니다. 사용자가 센서 기반 회전을 잠갔더라도 센서가 사용됩니다. API 레벨 9에서 추가되었습니다.
"sensorPortrait" 기기 센서에 따라 정상적인 세로 방향 또는 반전된 세로 방향이 될 수 있습니다. 사용자가 센서 기반 회전을 잠갔더라도 센서가 사용됩니다. API 레벨 9에서 추가되었습니다.
"userLandscape" 기기 센서 및 사용자의 기본 설정에 따라 정상적인 가로 방향 또는 반전된 가로 방향이 될 수 있습니다. API 레벨 18에서 추가되었습니다.
"userPortrait" 기기 센서 및 사용자의 기본 설정에 따라 정상적인 세로 방향 또는 반전된 세로 방향이 될 수 있습니다. API 레벨 18에서 추가되었습니다.
"sensor" 기기 방향 센서가 방향을 결정합니다. 디스플레이 방향은 사용자가 기기를 잡고 있는 방법에 따라 다르며 사용자가 기기를 회전할 때 변경됩니다. 그러나 일부 기기는 기본적으로 4개의 모든 방향으로 회전하지 않습니다. 4개의 모든 방향을 허용하려면 "fullSensor"를 사용합니다. 사용자가 센서 기반 회전을 잠근 상태라도 센서가 사용됩니다.
"fullSensor" 기기 방향 센서가 4개의 방향을 결정합니다. 이는 4개의 화면 방향을 허용한다는 것을 제외하면 기기가 정상적으로 수행하는 것과 상관없이 "sensor"와 유사합니다. (예를 들어, 일부 기기는 세로 반전 또는 가로 반전을 정상적으로 사용하지 않지만 이 특성은 정상적으로 사용합니다.) API 레벨 9에서 추가되었습니다.
"nosensor" 물리적 방향 센서를 참조하지 않고 방향을 결정합니다. 센서가 무시되므로 사용자가 기기를 이동하는 방법에 따라 디스플레이가 회전하지 않습니다.
"user" 사용자의 현재 기본 설정 방향입니다.
"fullUser" 사용자가 센서 기반 회전을 잠금 설정한 경우 user와 동일하게 작동하고, 잠금 설정을 하지 않은 경우 fullSensor와 동일하게 작동하며 4개의 화면 방향을 허용합니다. API 레벨 18에서 추가되었습니다.
"locked" 현재 회전 방향을 잠금 설정합니다. API 레벨 18에서 추가되었습니다.

 

2. 코드에서 처리하기

Activity에서 onCreate시에 메서드를 호출하면 됩니다.

ActivityInfo에 정의된 상수는 위의 속성값과 동일하게 사용가능합니다.

 

Java일경우

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // setOrientation Activity
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
	// Application code here..
    }

Kotlin일경우

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
    }

 

반응형