안드로이드에서 화면을 만들어 표시하는 컴포넌트는 액티비티이며 액티비티가 실행되면서 뷰 클라스를 이용해 화면을 구성한다.
TextView, ImageView, EditText, Button, Spinner, ListView 등 많은 뷰 클래스가 있다
액티비티 화면을 구성할 때 사용하는 클래스는 모두 View의 하위 클래스다.
뷰 클래스는 다음과 같은 구조를 그린다
- View
- 모든 뷰 클래스의 최상위 클래스다. 액티비티는 View의 서브 클래스만 화면에 출력한다
- ViewGroup
- View의 하위 클래스긴 하지만 자체 UI는 없어서 화면에 출력해도 아무것도 나오지 않는다
- 다른 뷰 여러 개를 묶어서 제어할 목적으로 사용한다 일종의 그릇 역할로 일반적으로 컨테이너 기능을 담당한다
- 실제로는 ViewGroup의 서브 클래스인 레이아웃 클래스를 사용한다(리니어레이아웃, 컨스트레인레이이웃 등)
- 텍스트뷰, 이미지 뷰 등…
뷰 바인딩
레이아웃 XML 파일애 선언한 뷰 객체를 쉽게 이용하는 방법이다
매번 findViewById 함수로 얻어서 사용하기 번거로워서 만들어졌다
gradle의 buildFeatures.viewBinding을 true로 설정하면 레이아웃 파일의 UI컴포넌트들의 id를 camel case로 자동으로 만들어준다
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
이렇게 선언하면 binding 변수를 통해 접근할 수 있다
레이아웃 종류
- LinearLayout
- RelativeLayout
- 상대 뷰의 위치를 기준으로 정렬하는 방식이다
- 화면에 이미 출력된 특정 뷰를 기준으로 방향을 지정한다
- FrameLayout
- 뷰를 겹쳐서 출력하는 방식이다
- 카드를 쌓듯이 뷰를 추가하는 순서대로 위로 겹쳐서 계속 출력하는 레이아웃이다.
- 잘 사용하지는 않지만 하단에 탭을 눌러 화면이 바뀌는 기능이라고 할 때 이 레이아웃으로 화면 순서를 바꿔가며 출력하는 방식으로 구현할 수 있다 보통은 프래그먼트를 사용한다