본문 바로가기

안드로이드 Android

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에서 태그를 이용해 정의한다.