일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[Android/Kotlin] 액티비티 전체화면 설정하기, 관련 함수 설명 본문
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
'Android' 카테고리의 다른 글
[Android] 안드로이드 에뮬레이터(AVD)에서 상태바(Status Bar)가 표시되지 않는 오류 해결 (0) | 2022.01.21 |
---|---|
[Android/Kotlin] 브로드캐스트 리시버(Broadcast Receiver) 컴포넌트 정리 (0) | 2022.01.21 |
[Android] ImageView 뷰 영역을 이미지 크기에 딱 맞추기 (0) | 2022.01.12 |
[Android/Kotlin] Jetpack 리사이클러 뷰(RecyclerView)로 목록 화면 구현하기 (0) | 2022.01.08 |
[Android/Kotlin] MenuItem 객체의 actionView 속성 접근시 에러 해결 (0) | 2022.01.06 |
Comments