티스토리 뷰

안드로이드 Activity를 생성하면 onCreate() 메서드가 자동으로 생성이 되고 그 안에는 하기 코드가 함께 생성되는 것을 확인할 수 있다. 해당 코드에 대해 알아보자.

ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
    Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
    v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
    return insets;
});

 

이 코드는 status bar, navigation bar, display cutouts (notches) 등 다양한 시스템 UI 요소에 맞게 앱 UI를 조정하기 위한 window insets (창 삽입) 처리와 관련이 있다.

 

  • Key Points
    • ViewCompat.setOnApplyWindowInsetsListener
      : View에 window insets이 적용될 때 이를 처리하도록 OnApplyWindowInsetsListener 를 설정한다. 이 함수는 ViewCompat 을 사용하므로 이전 버전의 안드로이드와 호환된다.
    • findViewById(R.id.main)
      : Activity의 레이아웃에서 root view 역할을 하는 ID가 main 인 View (에: ConstraintLayout 또는 FrameLayout) 을 참조한다. 
    • WindowInsets.Compat.Type.systemBars()
      : status bar와 navigation bar 를 포함하는 system bars를 참조한다.
    • v.setPadding(...)
      : system bars 가 차지하는 공간을 고려해 View 의 padding을 조정한다. 이렇게 하면 콘텐츠가 status bar, navigation bar, display cutouts (notches)에 가려지지 않는다.
  • Purpose
    • Safe Content Display
      : 이 코드를 사용하는 주된 이유는 콘텐츠가 시스템 UI 요소 뒤에 숨겨지는 것을 방지하기 위해서다. 콘텐츠가 이러한 요소를 피하고 가시성을 유지하기 위해 조정되도록 한다.
    • Edge-to-Edge Display
      : 엣지-투-엣지 디스플레이, 노치 또는 둥근 모소리가 있는 디바이스용 앱을 디자인할 때 특히 유용하다.
  • When Is This Needed?
    • 콘텐츠가 status bar 또는 navigation bar 와 겹치지 않도록 하려는 Fullscreen activities
    • Display cutouts 또는 독특한 화면 모양이 있는 기기에 맞게 조정해야 하는 앱
  • Examples Use Case
    : 앱에 system bars가 가려지지 않고 화면의 안전한 영역 내에 있어야 하는 UI 가 있는 경우 (예: 몰입형 또는 엣지 투 엣지) 이 코드를 사용하면 UI 가 이러한 insets을 자동으로 고려할 수 있다.
  • Removing it
    : system bars에 맞게 UI를 조정할 필요가 없고 콘텐츠가 이미 이러한 UI 요소와 겹치지 않고 적절하게 배치되어 있는 경우에는 이 코드가 필요하지 않을 수 있다.
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함
반응형