티스토리 뷰
View란?
화면을 구성하는 최소 단위의 컴포넌트
안드로이드에서는 액티비티 위에 뷰(View)들이 배치됨
View? Application에서 눈에 가시적으로 표현되는 모든 것을 가리킨다. Button, Image, Table, Label 등을 의미한다.
View의 상속관계는 다음과 같은데 View 계열의 클래스는 가시적으로 보이는 것을 나타내고 ViewGroup에서는 View들을 잘 배치할 수 있는 역할을 할 수 있는 클래스를 나타낸다. Container의 역할을 한다고한 할까?
View -> TextView, ImageView, SurfaceView, ProgressBar ...
ViewGroup -> FrameLayout, RelativeLayout, LinearLayout, GridLayout .. . 등을 의미함
cf) Layout 정리 --> rosypark.tistory.com/376
안드로이드에서 동적으로 View 추가하기
- LayoutInflater 객체 생성 필요
- Inflate란? Layout을 생성하는 것을 의미
즉,View를 정의한 xml or JAVA 파일대로 View를 Inflate(부풀림)한다고 생각하면됨
ex1)
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.xml_linearlayout)
inflater.inflate(R.layout.test_root_view, linearLayout,true);
// 이떄 true가 되면 자동으로 붙여주는것, false는 수동으로 붙이는것, addView 필수
ex2)
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.xml_linearlayout)
View exampleView = (ImageView)mflater.inflate(R.R.layout.test_root_view, linearLayout,false);
linearLayout.addView(exampleView) ;
View가 그려지는 과정
- View는 Focus를 얻으면 레아이웃을 그리도록 요청
- 루트노드에서 시작되어 트리를 따라 전위 순회 방식으로 그려지는데 레이아웃을 그리는 과정은 Measure단계와 Layout단계를 통해 그려짐
(1) Constructor - 모든 뷰는 생성자에서 출발, 생성자에서 초기화한 후 default 값 설정
(2) onAttachedToWindow - addView 호출 후 자식 View는 Window에 붙게됨
(3) onMeasure - View의 크기 측정, Layout크기에 맞게 특정 크기를 가지고옴
(4) onLayout - View의 크기와 위치 할당
(5) onDraw - View를 실제 그리는 단계
(6) View Update - 다시 View를 그리도록 유도하는 invalidate() & requestLayout()함수
- invalidate() ? 단순히 View를 그릴때 사용
- requestLayout() ? onMeasuer()부터 다시 View를 그림, View의 사이즈가 변경되면 다시 재측정 필요, 재순회하면서 View를 그림
View 종류(어려운 것)
1. ScrollView
- 화면을 스크롤 시킬 수 있는 뷰 그룹
-> 각 스크롤뷰는 하나의 자식뷰(보통 LinearLayout많이 사용) 만 가질 수 있음
- android.widget.ScrollView / android.widget.HorizontalScrollView
- 자신의 영역을 초과하여 배치된 자식 뷰를 볼 수 있음 -> 당장 보이지 않는 자식뷰까지 미리 생성해야 하기 때문에 메모리 사용량이 늘어나고, 이때 AdapterView 로 극복하는것이 필요
- 동일한 형태의 레이아웃 그룹을 갖지 않는 경우 사용
2. AdapterView
- Adapter AdapterView는 독립적으로 동작
- AdapterView 하위에 ListView, ExpandableListView, GridView, Spinner, Gallery 등을 묶어서 표현
Adapter?
- 관리되는 데이터와 어댑터 뷰에 제공할 뷰 형태에 따라 다양
- 어댑터뷰에 데이터에 공급하는 객체, 원본으로부터 얻은 데이터를 관리, 어댑터 뷰에 데이터 공급
AdapterView? 배치되는 모습에 따라 다양
- AdapterView 서브 클래스에는 ListView, GridView, Spinner등이 있음
- AdapterView는 Adpater 안에 항목들을 입력하고 Adapter View에 적용시킴
- ArrayAdapter, SimpleAdapter, CursorAdapter 제공
- 보통 동질적인 형태의 데이터를 어댑터 객체로부터 공급받아 나열해주는 위젯
- 수직 스크롤만 제공
- 특별한 배치가 되는게 아니라 하나의 위젯으로 생각하면 됨 -> 사용자와 상호작용할 수 있음
- 보이지 않는 자식 뷰를 보여야할 때 비로소 생성됨
<출처>
1. blog.naver.com/PostView.nhn?blogId=highkrs&logNo=220491317756
3. coding-restaurant.tistory.com/94
4.
4. hyeonu1258.github.io/2018/03/26/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%20%EB%A9%B4%EC%A0%91/
'Programming > Android' 카테고리의 다른 글
[Android] Layout (0) | 2020.11.28 |
---|---|
[Android] Fragment (0) | 2020.11.28 |
[Android] View Container (0) | 2020.11.26 |
[Android/Jetpack] Room DB 저장과 비동기처리 (0) | 2020.09.19 |
[Android/Jetpack] WorkManager (0) | 2020.09.18 |