개발일지

Android in A..Z - View (개념) 본문

Android (안드로이드)/View

Android in A..Z - View (개념)

강태종 2021. 4. 29. 15:04

Android는 View와 ViewGroup을 통해 UI를 구축하여 사용자와 상호작용할 수 있다. 기본적으로 Button, TextView 등의 View와 ConstraintLayout, LinearLayout 등의 ViewGroup을 제공하기 때문에 쉽게 앱을 제작할 수 있다.

하지만 기본적으로 제공하는 View와 ViewGroup으로 원하는 UI를 구축할 수 없는 경우가 있으며, 이런 경우 View와 ViewGroup을 상속받아 직접 구현할 수 있고 기존의 정의된 View를 상속받아 기능을 확장할 수 있다.


View Method

View에서 제공하는 Method를 재정의하면서 View를 Custom화 할 수 있다.

구분 함수 설명
생성 constructor(Context) 코드에서 View를 생성할 때
constructor(Context, AttributeSet) XML에서 View를 생성할 때
constructor(Context, AttributeSet, Int) ThemeStyle과 함께 XML에서 View를 생성할 때
constructor(Context, AttributeSet, Int, Int) ThemeStyle 또는 Style로 XML에서 View를 생성할 때
onFinishInflate() View 및 View의 모든 자식이 XML에서 확정되었을 때
레이아웃 onMeasure(Int, Int) View의 크기를 측정할 때
onLayout(Boolean, Int, Int, Int, Int) View의 위치를 측정할 때
onSizeChanged(Int, Int) View의 크기가 변경됐을 때
그리기 onDraw(Canvas) View를 그릴 때 사용
이벤트 onKeyDown(Int, KeyEvent) 새 이벤트가 발생할 때
onKeyUp(Int, KeyEvent) 새 이벤트를 수행할 때
포커스 onFocusChanged(Boolean, Int, Rect) 포커스 변화가 생겼을 때
onWindowFocusChanged(Boolean) View가 포함된 Window의 포커스 변화가 생겼을 때
연결 onAttachedToWindow() addView를 통해 View가 Window에 연결될 때
onDetachedFromWindow() Activity가 소멸되거나 코드상으로 View가 Window에 분리될 때
onWindowVisibilityChanged(Int) Window의 가시성 변화가 생겼을 때

 


View 생명주기

 

measure, onMeasure / layout, onLayout => measure과 layout은 final 함수로 선언되었다. 그 이유는 onMeasure과 onLayout을 재정의하고 호출은 measure과 layout을 통해 onMeasure과 onLayout을 호출하기 위함이다.

 

invalidate() vs requestLayout() => invalidate()는 View를 새롭게 그리는 반면 requestLayout()은 View의 크기와 위치를 다시 계산 후 View를 그린다.


Git (예제코드)

github.com/KangTaeJong98/Example/tree/main/Android/CustomView

 

KangTaeJong98/Example

My Example Code. Contribute to KangTaeJong98/Example development by creating an account on GitHub.

github.com

 

Comments