본문
[2018.07.08] 105. Viewstub 개념과 실습
컴퓨터/이론: 안드로이드 2018. 7. 8. 14:32
도입
이번 포스팅에서는 Viewstub의 개념에 대해 정리하고 실습할 예정이다.
개념
(출처 - https://developer.android.com/reference/android/view/ViewStub)
"lazily inflate" 런타임에 layout inflate해 resource를 효율적으로 사용할 수 있다.
실습
Step1. Main Xml 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" android:layout_gravity="center" android:padding="4dp" /> <ViewStub android:id="@+id/view_stub" android:layout="@layout/inflated_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> | cs |
Step2. inflate될 View Xml 설정
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 32 33 34 35 | <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_margin="4dp" app:cardElevation="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" app:srcCompat="@mipmap/ic_launcher_round" /> <TextView android:id="@+id/tv_real" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="This is inflated View" /> <Button android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Close" /> </LinearLayout> </android.support.v7.widget.CardView> | cs |
Step3. MainActivity에서 inflate 및 다양한 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private fun initView() { val rootView = view_stub.inflate() // 여기서 rootView는 cardView // view_stub.visibility = View.VISIBLE // 이렇게 inflate가 가능하지만 그렇다면 rootView를 가져 올 수 없다. val lp = LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ) lp.gravity = Gravity.CENTER rootView.layoutParams = lp rootView.btn_close.setOnClickListener { rootView.visibility = View.GONE } } | cs |
(view attribute 우선순위 - http://heepie.tistory.com/313)
여기서 추가적으로 알 수 있는 것은 LayoutParams 설정은 Code에서 가능하고 xml값이 code 설정값으로 대체 된다.
(사실 당연한 것이고 Code에서 값은 runtime에 적용되기 때문에 당연한 것이다.)
스크린 샷
#viewstub #viewstub 개념
'컴퓨터 > 이론: 안드로이드' 카테고리의 다른 글
[2018.07.14] 107. ScrollView Top 확인방법과 주의할 점 (0) | 2018.07.14 |
---|---|
[2018.07.14] 106. View attribute 우선순위 (0) | 2018.07.14 |
[2018.06.13] 104. View, ViewGroup 관계 (0) | 2018.06.13 |
[2018.05.27] 103. AsyncTask - execute VS executeOnExecutor (0) | 2018.05.27 |
[2018.03.26] 102. SharedPreferences 개념과 실습 (0) | 2018.03.27 |
댓글