주문형 뷰 로드

레이아웃에 거의 사용되지 않는 복잡한 뷰가 필요한 경우가 있습니다. 여부 실행취소, 실행취소 등 중요함이 있으므로 야기할 수 있는 경우에만 뷰를 로드하여 렌더링 속도를 확인할 수 있습니다

앱에 복잡한 뷰가 있는 경우 리소스 로드를 지연할 수 있음 향후 니즈에 맞는 ViewStub: 복잡하고 거의 사용되지 않는 뷰

ViewStub 정의

ViewStub는 다음과 같은 크기가 없는 간단한 뷰입니다. 무언가를 그리거나 레이아웃에 참여할 수 없습니다. 따라서 필요한 리소스가 확장하거나 뷰 계층 구조에 남겨두는 것입니다. 각 ViewStub에 포함되는 사항 android:layout 속성을 사용하여 확장할 레이아웃을 지정합니다.

나중에 사용자 여정에서 로드하려는 레이아웃이 있다고 가정해 보겠습니다. 앱:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:src="@drawable/logo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

다음 ViewStub를 사용하여 로드를 연기할 수 있습니다. 만들기 무언가를 표시하거나 로드하는 경우 참조된 레이아웃을 표시하도록 해야 합니다.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

ViewStub 레이아웃 로드

이전 섹션의 코드 스니펫은 다음 그림과 같은 것을 생성합니다. 1:

빈 화면 이미지
그림 1. 화면의 초기 상태: ViewStub 무거운 레이아웃을 숨기는 것입니다

ViewStub에서 지정한 레이아웃을 로드하려면 다음 안내를 따르세요. 또는 setVisibility(View.VISIBLE) 또는 전화 inflate()입니다.

다음 코드 스니펫은 지연된 로드를 시뮬레이션합니다. 화면이 다음과 같이 로드됩니다. ActivityonCreate()에서 평소와 같은 경우 heavy_layout_we_want_to_postpone 레이아웃:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_old_xml)

  Handler(Looper.getMainLooper())
      .postDelayed({
          findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
          
          // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()
      }, 2000)
}

자바

@Override
void onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_old_xml);

  Handler(Looper.getMainLooper())
      .postDelayed({
          findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
          
          // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()
      }, 2000);
}
그림 2. 무거운 레이아웃이 보입니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.
를 통해 개인정보처리방침을 정의할 수 있습니다. <ph type="x-smartling-placeholder">

ViewStub 요소는 표시되거나 확장되면 더 이상 뷰 계층 구조입니다. 확장된 레이아웃과 이 레이아웃의 루트 뷰는 android:inflatedId에서 지정합니다. ViewStub의 속성입니다. 지정된 ID android:idViewStub ViewStub 확장될 수 있습니다.

<ph type="x-smartling-placeholder">

이 주제에 관한 자세한 내용은 블로그 게시물을 참고하세요. 최적화 스텁 포함