본문 바로가기

프로그래밍/안드로이드

[안드로이드] 기타 레이아웃(Absolute, Frame, Table)

※ 저는 안드로이드 프로그래밍 정복(김상형 著, 한빛미디어) 책을 이용해 공부하고 있으며

예제와 코드는 이 책을 통해 공부중임을 밝힙니다.

개인적인 공부를 하면서 정리한 형식이기 때문에 심각한 오류가 있을 수 있습니다. 피드백 주시면 정말 감사하겠습니다.


※ 안드로이드 프로그래밍 정복(173p~180p) 참조



Absoulte Layout(173p~175p)


1. RelativeLayout과 반대 속성을 가지는 레이아웃


2. 굉장히 직관적이고 자유도가 높음


3. But, 화면이나 방향이 수시로 바뀌는 경우 유연하지 못하고 관리가 어렵다.


4. 공식문서에서는 제공되지 않는 레이아웃(그림을 보면 밑줄이 그어져 있는 것을 볼 수 있다.)


5. 절대좌표가 꼭 필요하다면 "마진"을 사용한다.



layout_x, layout_y대신 layout_marginLeft, layout_marginTop을 사용.


 전 예제와 똑같이 나온다는 걸 알 수 있다.


이 경우에도 동일한 부작용이 발생하며, 이 코드를 사용하는 것이 바람직하지는 않다.


Frame Layout(175p~177p)


1. 모든 레이아웃 중에 가장 단순


2. 차일드를 배치하는 규칙이 없고 모든 차일드는 프레임 좌상단에 배치되며  차일드가 두 개 이상일 떄 추가된 순서대로 겹쳐서 표시 된다.


실용성

① 실행 중에 차일드를 관리할 수 있다. addView, removeView 등의 메서드로 차일드를 추가/삭제 가능


getChildCount 메서드로 차일드의 개수 조사 가능


② 겹쳐서 표시되지만 나머지는 숨기고 당장 사용할 차일드 "하나만" 선택적으로 나타나게 할 수 있다.


visibility 속성을 사용하여 조정가능하며, 뷰그룹 여러 개를 탭 형태로 겹쳐 놓고 실행 중에 스위칭이 가능하다.



이렇게 "포개져서" 작성되는 것을 알 수 있다.


책에서는 <Button>을 먼저 선언되어서 아래쪽에 깔린다고 했는데, 내 예제는 튀어나와있다. (??)


아무튼 아래 위를 바꾸고 싶다면 "선언 순서"를 달리하면 된다.


Table Layout(178p~180p)


표 형식으로 차일드를 배치하는 레이아웃이다.


1. 여러 개의 행이 한 테이블에 있어야 하므로 TableRow 객체의 높이는 항상 wrap_content(내용물의 크기만큼만 채우기)이다.


2. 셀에 배치되는 차일드 뷰는 무조건 주어진 셀 안에 배치되므로 layout_width 속성은 따로 지정할 수 없으며 


   항상 match_parent(부모의 주어진 크기를 다 채우기)로 가정된다.


   높이(layout_width)는 wrap_content가 디폴트 값(기본값)으로 설정된다.



<TableLayout>에 android:layout_margin을 넣어 부모와의 거리를 떨어뜨려 놓을 수도 있다.


지금은 <TableRow>안에만 padding을 넣어서 내용물 간의 간격을 준 상황.


적용가능한 속성 : shrinkColumns, strechColums


<TableLayout>


<TableRow(행)> 화면 크기가 허락되는 한 행과 열을 집어넣을 수 있다.


그런데 Row(행) 단위로 집어넣었으니 행을 추가시키려면 <TableRow>를 추가하면 "행"이 추가될 것이고


열을 추가시키려면 <TableRow>안에서 TextView를 추가하면 "열"이 추가될 것이다.


</TableLayout>


항상 헷갈리는 게 있다. 그것은 바로 행과 열.


column은 기둥이라는 뜻도 있는데, 기둥은 세로로 세워놓는다는 걸 생각하면 쉽게 암기(?) 할 수 있다.


나도 항상 헷갈려서 고생했다. 몸에 익숙해지는 수 밖에 없으니 손가락으로 십자가를 그어서라도 숙지해야 한다.