View
와 ViewGroup
의 hierarchy로 만들어진다.안드로이드 앱에서 유저에게 노출되는 모든 것이 View
이다. 유저는 결국 View
를 보고, View
와 interact하는 것. 가장 기본이 되는 컴포넌트 단위라고 할 수 있다.
위에서 확인할 수 있는 것처럼, 모든 UI 관련 컴포넌트(TextView
, ImageView
, EditText
등)은 결국 View
를 상속받아 만들어진다. 심지어 ViewGroup
까지도 View를 상속받는다.
// View
java.lang.Object
↳ android.view.View
// Layout(= ViewGroup)
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
그래서, 모든 UI는
View
이다.
일단, ViewGroup
은 위에서 확인한 View
와 다르게 invisible container이다. 유저가 이를 직접 볼 수는 없다. 이는 View
나 ViewGroup
을 모아 만든, Layout의 개념이다. View
, ViewGroup
모두가 ViewGroup에 들어올 수 있다는 것.
안드로이드 앱에서 XML은 AndroidManifest.xml, layout.xml, Resource.xml 등 여러 종류로 사용되는데, 마크업 언어이기에 사용하기 편하다. 그 중에서 Layout
으로의 사용을 알아보자.
모든 Layout는 오직 한 개의 root element만 가질 수 있으며, root도 역시 View 혹은 ViewGroup이어야 한다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
androidx.constraintlayout.widget.ConstraintLayout
이 root element이며, ViewGroup
이다.View
이다.android:id="@+id/~"
+
는 새로운 리소스 이름을 생성하고, 앱의 리소스에(R.javafile) 이를 포함시킨다.findViewById<>()
등을 사용하여 .kt
에서 XML의 View
에 접근하는 것.<~
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" />
상대적인 값들을 사용해서 다른 attribute를 정의할 때 사용한다. 대표적인 속성으로는
wrap_content
: View가 자신의 content(text나 하위 View 등)에 필요한 크기에 맞게 스스로 크기를 조절하도록 지시하는 속성.match_parent
: View가 부모 ViewGroup이 허용하는 크기에 맞게 스스로 크기를 조절하도록 지시하는 속성. 만약 부모 하위 자식 View가 자기 하나라면, 이 View는 부모 크기와 동일한 크기로 조정된다.dp
(density independent pixel): 화면의 물리적인 픽셀 밀도를 기반으로 하는 abstract unit.sp
(scale independent pixel): 기본적으로는 dp 단위와 동일한데, 유저 기기의 font size 설정에 따라 자동으로 조정된다.