01 기본 위젯과 레이아웃
이 포스트는 개인적인 공부를 위해 정리하는 포스트입니다.
내용은 모두 Do it 안드로이드 앱 프로그래밍에서 나온 것입니다.
가장 많이 사용되는 레이아웃 : 기본 레이아웃
기본 레이아웃의 대표 속성들
속성 | 설명 |
채우기 : fill model | 뷰를 부모뷰의 여유 공간에 어떻게 채울 것인지를 설정합니다. |
방향 : orientation | 뷰를 추가하는 방향 설정 |
정렬 방향 : gravity | 뷰의 정렬 방향을 설정 |
여유 공간 : padding | 뷰의 여유 공간을 설정 |
공간가중치 : weight | 뷰가 차지하는 공간의 가중치 값을 설정 |
안드로이드에서 제공되는 기본 레이아웃 종류
레이아웃 이름 | 설명 |
리니어 레이아웃 | 박스 모델 사각형 영역으로 화면 구성 |
상대 레이아웃 | 규칙 기반 모델 부모 컨테이너나 다른 뷰와의 상대적 위치를 이용해 화면 구성 |
프레임 레이아웃 | 하나의 뷰만 보여줌 여러 개의 뷰 중첩 가능 |
테이블 레이아웃 | 격자 모델 HTML에서 많이 사용하는 정렬방식과 유사 |
스크롤 레이아웃 | 스크롤 가능 |
레이아웃들을 사용할 때는 항상
android:layout_width
android:layout_height
속성이 들어가야 한다. 이 두 속성이 없으면 오류가 발생한다.
[리니어 레이아웃]
-뷰가 놓이는 방향 설정하기
<LinearLayout> 태그의 android:orientation="vertical" 속성 변경 vertical/horizontal
**match_parent로 인해 여유공간이 없어질 경우에는 view들이 겹쳐서 보이게 되므로 조심한다.
if 초기 실행에 보이는 액티비티를 변경하고 싶다면
AndroidManifest.xml 파일의 <activity> 태그의 android:name 속성 값을 바꾸어준다.
앞서 살펴본 setContentView() 메소드에는 .xml파일이 인자로 들어갔었다.
이 메소드는 파라미터로 리니어 레이아웃으로 만든 객체를 넣을 수도 있다.
xml 레이아웃의 대부분을 자바 코드로 할 수 있다.
뷰 객체를 코드에서 만들 때 뷰의 생성자에는 항상 Context 객체가 전달되어야 하는데
액티비티는 Context를 상속하므로 액티비티 클래스 안에서는 this를 Context 객체로 사용할 수 있다.
자바 코드상에서 뷰를 배치할 땐 LayoutParams 객체를 사용 이 때 채우기 속성을 지정해야 한다.
뷰그룹에 뷰를 추가하기 위해선 addView 메소드를 호출한다.
-정렬 방향 설정하기
정렬 속성 | 설명 |
layout_gravity | 부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유 공간 안에서 뷰 정렬 |
gravity | 뷰에서 화면에 표시하는 내용물을 정렬할 때 |
gravity 속성의 경우 중복도 가능하며 | 연산자 앞과 뒤에 padding 띄어쓰기 없이 붙여서 쓰면 된다.
여유 공간이 없다면 gravity 속성 지정이 의미가 없다.
gravity의 속성 값에는
top, bottom, left, right, center_vertical, center_horizontal, fill_vertical, fill_horizontal, center, clip_vertical, clip_horizontal 이 있다.
텍스트와 버튼의 높이가 잘 맞지 않는 경우
baselineAligned 속성을 사용한다.
<LinearLayout> 태그에 android:baselineAligned="true"를 지정하면 레이아웃에 추가되는 뷰들이
가지는 글자의 아랫줄에 맞추어진다.
xml 파일에서 android:textColor 는 글자 색을 지정할 수 있고, android:textSize 는 글자 크기를 지정할 수 있다.
-여유 공간 설정하기
버튼이나 텍스트 같이 화면을 구성하는 뷰를 위젯이라고 하는데 위젯이 부모 컨테이너로부터 할당된 공간을 차지한 것을
위젯 셀이라고 하며 이 안에서 여백은 layout_margin 속성을 이용한다. layout_marginTop, layout_marginRight
한편 뷰 안에서의 내용물과의 여백은 padding 속성을 이용한다. paddingTop, paddingRight
첫 번째와 세 번째는 padding 이용
두 번째는 layout_margin 이용
-공간가중치 설정하기
layout_weight 속성을 통해 가중치를 지정. 예를 들어 2개의 뷰 각각에 1, 2의 가중치를 준다고 하면
화면에서 1/3, 2/3을 차지하게 되는 것이다.
여러 layout의 중첩이 가능하다.
[상대 레이아웃]
부모 컨테이너나 다른 뷰와의 상대적인 위치를 이용해 뷰의 위치를 결정. 이때 이미 추가되어있는 뷰의 id를 얻을 필요가 있음.
안드로이드에서 입력상자 기능을 하는 것은 EditText로 xml에서 태그를 이용해 정의한다.