안드로이드 개발 팁 #41 - 액티비티에 전체 화면 적용 방법 (린백 옵션)

액티비티에 전체 화면 적용 방법 (린백 옵션)

No. 41
23.09.23. (토) | Written by @dorian-mobileapp

시작하며…

마크다운 텍스트를 웹뷰로 보여주는 기능을 구현하고 있었는데요. 웹뷰 안에 위치한 유튜브 영상을 풀스크린으로 보는 기능도 구현해야 했습니다. 전체 화면 설정/해제하는 기능을 Activity 클래스의 확장 메소드로 정의해 보았습니다.


풀스크린 종류

안드로이드에서 적용 가능한 풀스크린은 3종류가 있습니다. 동영상을 전체화면으로 띄우는 경우에는 '린백'이 무난합니다. 관련 자세한 내용은 전체 화면 모드 사용 설정을 참고하세요.

  • 린백(lean back)
  • 이머시브 (immersive)
  • 스티키 이머시브 (sticky immersive)

액티비티에 풀스크린 적용/해제 (린백)

안드로이드 버전에 따라 2가지 방법으로 나뉩니다.

  • R (11) 미만
    • window 필드 객체의 decorView 필드의 setSystemUiVisibility(int visibility) 호출
    • 전체 모드 설정시 visibility: View.SYSTEM_UI_FLAG_FULLSCREEN, View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 비트를 on
    • 전체 모드 해제시 visibility: View.SYSTEM_UI_FLAG_FULLSCREEN, View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 비트를 off
  • R (11) 이상
    • window 필드 객체의 getInsetsController() 메소드 호출
    • 리턴 받은 WindowInsetsController 객체의 show(int types), hide(int types) 메소드 호출
      • 전체 모드 설정시: hide(types) 호출
      • 전체 모드 해제시: show(types) 호출
      • types: WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars()

전체 화면 모드 적용 코드

fun Activity.setLeanBackFullscreen() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
        window?.decorView?.let {
            it.systemUiVisibility = it.systemUiVisibility
                .or(View.SYSTEM_UI_FLAG_FULLSCREEN)
                .or(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
        }
    }
    else {
        window?.insetsController?.let {
            it.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
        }
    }
}

전체 화면 해제 적용 코드

fun Activity.unsetFullscreen() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
        window?.decorView?.let {
            it.systemUiVisibility = it.systemUiVisibility
                .and(View.SYSTEM_UI_FLAG_FULLSCREEN.inv())
                .and(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION.inv())
        }
    }
    else {
        window?.insetsController?.let {
            it.show(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
        }
    }
}

참고 링크


지난 안드로이드 개발 팁


Layout provided by Steemit Enhancer hommage by ayogom
Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.13
TRX 0.31
JST 0.034
BTC 110221.33
ETH 4274.40
USDT 1.00
SBD 0.83