찐빵개발자 2022. 10. 18. 23:43

https://developer.android.com/training/improving-layouts/loading-ondemand?hl=ko  

 

뷰 로드 지연  |  Android 개발자  |  Android Developers

때때로 레이아웃에 거의 사용되지 않지만 복잡한 보기가 필요한 때가 있습니다. 보기의 종류(예: 항목 세부정보, 진행률 표시기 또는 실행취소 메시지)에 상관없이 필요할 때만 보기를 로드하여

developer.android.com

 

ViewStub이란? 

  • lazy include 
  • lightweight view 
  • 무엇을 그리거나 레이아웃에 참여하지 않음. 
  • ViewStub을 이용하면, 메모리 사용을 줄이고 렌더링 속도를 높을 수 있다. 

 

언제 사용해? 

사용빈도는 낮지만 복잡한 뷰가 필요할때! 

ex) landscape 처리, 가이드뷰, ...

 

 

 

어떻게 사용해? 

 

android:layout 속성에 확장할 레이아웃을 지정해주고, 

<ViewStub
        android:id="@+id/stub_import"
        android:inflatedId="@+id/panel_import"
        android:layout="@layout/progress_overlay"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom" />

 

ViewStub에 지정된 레이아웃을 로드하려면, setVisibility(View.Visible)을 호출하거나, inflate()를 호출하자. 

 findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
    // or
    val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()

 

확장되기 전까지는 stub_import를 사용하지만, 

이후에는 pannel_import를 id로 사용하게 됨. 

 

단점

<merge/> 태그를 지원하지 않음.