Android
[Android/Kotlin] 액티비티 전체화면 설정하기, 관련 함수 설명
haehyun
2022. 1. 19. 23:43
728x90
화면 위에 시계, 배터리 등이 포함된 상태바와 애플리케이션 제목이 적힌 액션바를 숨기고, 액티비티 내용만을 전체화면으로 표시할 수 있다.
1. 액션바 숨기기
액션바가 출력되지 않도록 themes.xml 파일에서 액티비티에 적용되는 테마를 NoActionBar 등으로 지정한다.
[res] > [values] > [themes] > [themes.xml]
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.AndroidLab" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- 생략 -->
</style>
</resources>
2. 전체화면 출력 설정
액티비티 코드에서 전체화면으로 출력되게 설정한다. API 레벨 30부터 액티비티 창 설정 방법이 변경됐기 때문에 앱 버전 호환성을 고려해서 코드를 작성해줘야 한다. (사용자 스마트폰의 버전에 상관없이 앱이 정상적으로 작동해야 함)
- API 레벨 30 (R버전) 이상 - WindowInsetsController 클래스 함수 사용
- API 레벨 30 (R버전) 미만 - window.setFlags() 함수, WindowManager.LayoutParams.FLAG_FULLSCREEN 등 상수 사용
[MainActivity.kt]
package com.example.androidlab
import android.os.Build
import android.os.Bundle
import android.view.WindowInsets
import android.view.WindowInsetsController
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import com.example.androidlab.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 버전 체크
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 데코 뷰를 루트 뷰에 맞추지 않음
window.setDecorFitsSystemWindows(false)
// WindowInsetsController
val controller = window.insetsController
if (controller != null) {
// 상태바, 네비게이션바 숨기기
controller.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
// 스와이프 시 상태바 일시적으로 나타나도록 설정
controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
} else {
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
}
}
}
위와 같이 설정하면 해당 액티비티가 전체화면으로 표시될 것이다. 아래는 위 코드에서 사용된 클래스, 함수, 필드에 대한 상세 설명이다. 영문을 보고 번역한 것이기 때문에 틀린 부분이 있을수도 있음.
코드 기능 설명
Build 클래스
class | Build | 시스템 속성에서 추출한 현재 빌드에 대한 정보 |
class | Build.Partition | 특정 장치 파티션에 대해 정보 빌드 |
class | Build.VERSION | 여러가지 버전 문자열들 |
public static final int | Build.VERSION.SDK_INT | 이 디바이스에서 현재 실행중인 소프트웨어의 SDK 버전 |
class | Build.VERSION_CODES | 현재 알려진 SDK 버전 코드들 열거형(상수 모음) |
public static final int | Build.VERSION_CODES.R | R 버전 (API 30 레벨) |
public static final int | Build.VERSION_CODES.O | Oreo 버전 (API 26 레벨) |
Window 클래스
window : getWindow() 프로퍼티, Activity의 현재 Window에 접근한다.
abstract class | Window | |
public void | .setDecorFitsSystemWindows(decorFitsSystemWindows : Boolean) | 데코 뷰가 WindowInsets의 루트 콘텐츠 뷰에 맞아야 하는지 여부 설정 |
public WindowInsetController | .window.insetsController | getInsetsControllers() 프로퍼티, 해당 Window의 WindowInsetController를 반환한다. |
public void | .setFlags(flags: Int, mask: Int) |
WindowInsetsController 인터페이스
interface | WindowInsetsController | insets를 생성하는 Window를 제어하기 위한 인터페이스 |
public abstract void | .hide(types: Int) | Insets를 유발하는 Window 집합을 사라지게 한다. |
public abstract void | .systemBarsBehavior | setSystemBarBehavior() 프로퍼티, 시스템바의 행동을 제어한다. |
int | .BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE | @Deprecated 스와이프에 의해 상태바 일시적으로 표시 → API level 31부터 BEHAVIOR_DEFAULT로 대체됨 |
int | .BEHAVIOR_DEFAULT | setSystemBarsBehavior(int)의 기본값 옵션, hide()로 네비게이션바를 숨길 때 Window가 대화형 상태를 유지함. |
WindowInsets 클래스
final class | WindowInsets | Window 콘텐츠를 위한 insets 세트 정보 |
final class | .Type | Window Insets를 유발하는 여러 소스 유형 정의 |
static int | .Type.statusBars() | 상태바 |
static int | .Type.navigationBars() | 네비게이션바 |
static int | .Type.captionBar() | 캡션바 |
static int | .Type.systemBar() | 시스템바 |
WindowManager 인터페이스
interface | WindowManager | 앱이 Window Manager(창 관리자)와 대화하는 데 사용하는 인터페이스. 각 WindowManager 인스턴스는 특정한 Display에 반인딩된다. |
static class | .LayoutParams | 레이아웃과 관련된 파라미터 상수 모음 |
static final int | .LayoutParams. |
@Deprecated 전체화면 설정용 상수. → API level 30부터 WindowInsetsController.hide(int) 로 대체 |
Insets
final class | Insets | 직사각형의 사방면의 여백을 나타내는 offset 정보 |
public final int | .bottom | 아래 |
public final int | .left | 왼쪽 |
public final int | .right | 오른쪽 |
public final int | .top | 위 |
참고자료
- Android developers reference, https://developer.android.com/reference?hl=en
- Do it! 깡쌤의 안드로이드 프로그래밍 with Kotlin
728x90