뷰 (View)
뷰(View)는 어플리케이션의 화면상에서 유저 인터페이스를 구성하는 Visual한 구성요소를 의미하며,
전통적인 데스크톱 개발에서의 컨트롤(Control) 또는 위젯(Widget)과 비슷하다고 할 수 있다.
예를 들어, 버튼, 그림, 텍스트, 에디트, 라디오 버튼, 체크박스 등의 기본적인 화면 구성 요소들이 뷰에 포함된다.
뷰의 리스너(Listener) 설정을 통해 이벤트가 발생했을 경우를 처리할 수 있다.
예를 들어 버튼이 클릭되었을 때 등록된 OnClickListener()가 호출되어 처리된다.
뷰 그룹 (ViewGroup)
뷰 그룹(ViewGroup)은 여러 개의 자식 View 객체를 담을 수 있는 View 클래스의 확장이다.
말 그대로 여러 개의 다양한 형태의 자식 View 객체들을 담고 있는 컨테이너를 ViewGroup라고 한다.
ViewGroup 클래스를 확장하면 서로 연결된 여러 자식 뷰로 이뤄진 복잡한 컨트롤을 만들 수 있다.
ViewGroup은 View나 또 다른 ViewGroup를 가질 수 있는 구조적 형태를 지원하므로 자신이 자신을 포함하는
형태가 가능하다. ViewGroup 클래스는 레이아웃을 위한 기본 클래스로도 사용된다.
일반적으로 안드로이드에서는 Activity의 UI를 View와 ViewGroup의 트리 구조를 이용하여 구성한다.

ViewGroup에서 파생된 하위 클래스들은 아래와 같이 크게 두 범주로 나뉜다.
| 레이아웃 | • FrameLayout • LinearLayout • TableLayout • RelativeLayout • AbsoluteLayout |
| 뷰 컨테이너 위젯 | • AdapterView 파생 컨테이너 : ListView, GridView, GalleryView • 전환 위젯 : ViewFlipper, ImageSwitcher, TextSwitcher • 탭 위젯 : TabHost • 대화상자(dialog) • 스크롤 위젯 : ScrollView, HorizontalScrollView • 서랍 위젯 : SlidingDrawer |
레이아웃 (Layout)
레이아웃(Layout)은 각각의 뷰들을 화면상에 배치하고 구성해 주는 것을 의미하며,
보통의 경우 XML파일을 이용하여 레이아웃을 구성한다.
보통 onCreate() 메서드에서 setContentView()를 통해 레이아웃 리소스를 불러와 액티비티에 사용자 인터페이스
를 배치한다. 화면 위에 자식 컨트롤의 위치를 제어하기 위해 설계된 ViewGroup 클래스의 확장이다. 레이아웃은
포개질 수 있어서, 레이아웃 관리자를 조합해 임의의 복잡한 인터페이스를 만들 수 있도록 해 준다.
| FrameLayout | [중첩 배치 방식] 단일 객체를 표현하기 위한 뷰 프레임의 역할을 하는 레이아웃이다. 두 개 이상의 객체를 표현 할 때는 나중에 그린 객체를 먼저 보여 준다. |
| LinearLayout | [직선형 배치 방식] 수평 또는 수직으로 구성 요소를 배치하기 위한 레이아웃으로, 창의 길이가 화면의 길이를 초과하면 자동으로 스크롤바를 생성한다. |
| TableLayout | [표 배치 방식] 행과 열을 가진 테이블 구조의 레이아웃으로, 행은 가장 큰 구성 요소에 맞게 크기가 재설정되고 셀 테두리는 감춰진다. |
| RelativeLayout | [상대적 배치 방식] 한 구성 요소를 기준으로 상/하/좌/우 방향으로 다른 구성 요소들을 배치할 수 있는 레이아웃으로, 상대적인 레이아웃이다. |
| AbsoluteLayout | [절대적 배치 방식] 절대적인 좌표값으로 객체의 위치를 지정하는 레이아웃이다. |
모든 LayoutParams의 서브 클래스는 값을 설정하는 각자의 방법을 가지고 있다.
각 하위 요소들은 부모의 속성에 맞는 LayoutParams를 정의해야 한다.

'Layout' 카테고리의 다른 글
| AbsoluteLayout (절대적 배치 방식) (0) | 2022.10.02 |
|---|---|
| RelativeLayout (상대적 배치 방식) (0) | 2022.10.02 |
| TableLayout (표 배치 방식) (0) | 2022.10.02 |
| LinearLayout (직선형 배치 방식) (0) | 2022.10.02 |
| FrameLayout (중첩 배치 방식) (0) | 2022.10.02 |
댓글