λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Study/Android

[μ•ˆλ“œλ‘œμ΄λ“œ μ½”ν‹€λ¦°] 5. λ ˆμ΄μ•„μ›ƒ(2) - λ¦¬λ‹ˆμ–΄ λ ˆμ΄μ•„μ›ƒ/λ λŸ¬ν‹°λΈŒ λ ˆμ΄μ•„μ›ƒ/ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒ

λ ˆμ΄μ•„μ›ƒ

 

배치λ₯Ό λ‹΄λ‹Ήν•˜λŠ” λ ˆμ΄μ•„μ›ƒ

- λ ˆμ΄μ•„μ›ƒ μ•ˆμ— μ‘΄μž¬ν•˜λŠ” μœ„μ ―μ„ λ°°μΉ˜ν•˜κ²Œ ν•΄μ€Œ

- ν”„λ‘œμ νŠΈλ₯Ό 처음 μƒμ„±ν•˜λ©΄ 화면을 ꡬ성할 수 μžˆλŠ” activity_mainμ΄λΌλŠ” μ΄λ¦„μ˜ λ ˆμ΄μ•„μ›ƒ 파일이 μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§

    - λ ˆμ΄μ•„μ›ƒ νŒŒμΌμ€ μ†ŒμŠ€ μ½”λ“œκ°€ μ•„λ‹Œ λ¦¬μ†ŒμŠ€λ‘œ λΆ„λ₯˜λ¨

    - 파일λͺ…은 λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ μž‘μ„±λ¨

    - 파일 이름 끝에 파일의 νƒ€μž…μΈ XML을 λΆ™μ—¬μ„œ activity_main.xml이 됨

 

자주 μ‚¬μš©λ˜λŠ” λ ˆμ΄μ•„μ›ƒ

1) λ¦¬λ‹ˆμ–΄ λ ˆμ΄μ•„μ›ƒ(μ„ ν˜•, LinearLayout)

2) λ λŸ¬ν‹°λΈŒ λ ˆμ΄μ•„μ›ƒ(μƒλŒ€, RelativeLayout)

3) ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒ(TableLayout)

4) κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒ(GridLayout)

5) ν”„λ ˆμž„ λ ˆμ΄μ•„μ›ƒ(FrameLayout)

6) 컨슀트레인트 λ ˆμ΄μ•„μ›ƒ(μ œμ•½, ConstraintLayout)

 


λ¦¬λ‹ˆμ–΄ λ ˆμ΄μ•„μ›ƒ(LinearLayout)

- μœ„μ ―μ„ κ°€λ‘œ λ˜λŠ” μ„Έλ‘œ ν•œ μ€„λ‘œ λ°°μΉ˜ν•˜κΈ° μœ„ν•œ λ ˆμ΄μ•„μ›ƒ

- λ ˆμ΄μ•„μ›ƒ 속성 orientation의 κ°€λ‘œ(horizontal), μ„Έλ‘œ(vertical)만 λ³€κ²½ν•΄μ£Όλ©΄ 기쑴에 λ°°μΉ˜λ˜μ–΄ 있던 μœ„μ ―λ“€λ„ λ°©ν–₯을 λ°”κΏ€ 수 있음

 

μ‚¬μš© 방법

1. UI νŽΈμ§‘κΈ° 우츑 상단에 μžˆλŠ” [Code] λ²„νŠΌμ„ ν΄λ¦­ν•΄μ„œ λͺ¨λ“œλ₯Ό λ³€κ²½

2. 화면이 XML μ½”λ“œλ₯Ό 직접 νŽΈμ§‘ν•  수 μžˆλŠ” λͺ¨μ–‘μœΌλ‘œ λ³€κ²½

3. XML μ½”λ“œμ—μ„œ 2행에 μžˆλŠ” ‘androidx.constraintlayout.widget.ConstraintLayout’을 ‘LinearLayout’으둜 μˆ˜μ •

4. λ‹€μ‹œ 우츑 상단에 μžˆλŠ” [Design] λ²„νŠΌμ„ ν΄λ¦­ν•΄μ„œ λͺ¨λ“œλ₯Ό λ³€κ²½ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈ 트리의 μ΅œμƒμœ„ λ ˆμ΄μ•„μ›ƒμ΄ λ¦¬λ‹ˆμ–΄ λ ˆμ΄μ•„μ›ƒμœΌλ‘œ λ³€κ²½λœ 것을 확인

 

ν•œ ν™”λ©΄μ—μ„œ μœ„μ ―μ„ μˆ˜ν‰κ³Ό 수직으둜 λ‹€μ–‘ν•˜κ²Œ λ°°μΉ˜ν•΄μ•Ό ν•˜λŠ” 경우

- λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒ μ•ˆμ— λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒμ„ μƒμ„±ν•˜λŠ” 방식을 μ‚¬μš©

- λ°”κΉ₯의 큰 λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒμ„ 3개의 μž‘μ€ λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒμœΌλ‘œ λΆ„λ₯˜ν•œ ν›„ 각 λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒ μ•ˆμ— ν•„μš”ν•œ μœ„μ ―μ„ λ°°μΉ˜ν•˜λŠ” 방식을 주둜 μ‚¬μš©

 

μ£Όμš” 속성

- orientation

 : λ ˆμ΄μ•„μ›ƒ μ•ˆμ— λ°°μΉ˜ν•  μœ„μ ―μ˜ 수직 λ˜λŠ” μˆ˜ν‰ λ°©ν–₯을 μ„€μ •

- gravity

 : λ ˆμ΄μ•„웃 μ•ˆμ— λ°°μΉ˜ν•  μœ„μ ―μ˜ μ •λ ¬ λ°©ν–₯을 쒌츑, 우츑, 쀑앙 λ“±μœΌλ‘œ μ„€μ •

- padding

 : λ ˆμ΄μ•„웃 μ•ˆμ— λ°°μΉ˜ν•  μœ„μ ―μ˜ 여백을 μ„€μ •

- layout_weight

 : λ ˆμ΄μ•„웃이 전체 ν™”λ©΄μ—μ„œ μ°¨μ§€ν•˜λŠ” κ³΅κ°„μ˜ 가쀑값을 μ„€μ •ν•˜λŠ”λ°, μ—¬λŸ¬ 개의 λ ˆμ΄μ•„μ›ƒμ΄ 쀑볡될 λ•Œ 주둜 μ‚¬μš©

- baselineAligned

 : λ ˆμ΄μ•„웃 μ•ˆμ— λ°°μΉ˜ν•  μœ„μ ―μ„ 보기 μ’‹κ²Œ 정렬함

β€» λ ˆμ΄μ•„μ›ƒλ„ View 클래슀의 ν•˜μœ„ ν΄λž˜μŠ€μ΄λ―€λ‘œ View 클래슀의 XML속성과 λ©”μ†Œλ“œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 있음

 

orientation 속성

- λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒμ˜ κ°€μž₯ 기본적인 속성

- κ°’μœΌλ‘œ verticalκ³Ό horizontal을 지정할 수 있음 

- vertical

 : λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒ μ•ˆμ— 포함될 μœ„μ ―μ˜ 배치λ₯Ό μ™Όμͺ½ μœ„λΆ€ν„° 수직 λ°©ν–₯으둜 μŒ“μŒ

- horizontal

 : λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒ μ•ˆμ— 포함될 μœ„μ ―μ˜ 배치λ₯Ό μ™Όμͺ½ μœ„λΆ€ν„° μˆ˜ν‰ λ°©ν–₯으둜 μŒ“μŒ

 : μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ κ°€λ‘œ(horizontal)κ°€ μ μš©λΌμ„œ κ°€λ‘œλ‘œ 배치

 

gravity 속성

- λ ˆμ΄μ•„μ›ƒ μ•ˆμ˜ μœ„μ ―μ„ 어디에 λ°°μΉ˜ν•  것인지λ₯Ό κ²°μ •

    - 기본값은 쒌츑 상단에 배치됨

- κ°’μœΌλ‘œ left, right, center, top, bottom 등을 μ‚¬μš©

    - 2개λ₯Ό μ‘°ν•©ν•˜μ—¬ μ‚¬μš©ν•  μˆ˜λ„ 있음

    - right | bottom : 였λ₯Έμͺ½ μ•„λž˜μ— 정렬함

속성값 μ„€λͺ…
top μœ„μͺ½μ— 배치
bottom μ•„λž˜μͺ½μ— 배치
left μ™Όμͺ½μ— 배치
right 였λ₯Έμͺ½μ— 배치
center_vertical 수직 쀑앙에 배치
center_horizontal μˆ˜ν‰ μ€‘앙에 배치
center μˆ˜ν‰κ³Ό 수직의 μ€‘앙에 배치

 

layout_gravity 속성

- μžμ‹ μ˜ μœ„μΉ˜λ₯Ό λΆ€λͺ¨(주둜 λ ˆμ΄μ•„μ›ƒ)의 어디에 μœ„μΉ˜μ‹œν‚¬μ§€ 결정함

- κ°’μœΌλ‘œ left, right, center, top, bottom 등을 μ‚¬μš©

    - μ†μ„±κ°’μ˜ νŠΉμ§•μ€ gravity 속성과 λ™μΌν•˜μ§€λ§Œ μ μš©λ˜λŠ” λŒ€μƒμ΄ 닀름

    - gravityλŠ” λ ˆμ΄μ•„μ›ƒμ—, layout_ gravityλŠ” μœ„μ ―μ— 주둜 지정함

 

λ§ˆμ§„κ³Ό νŒ¨λ”© 속성

λ§ˆμ§„(margin)

- μ™ΈλΆ€ μ—¬λ°±, 즉 뷰와 λΆ€λͺ¨ λ·° μ‚¬μ΄μ˜ 곡간

- 4λ©΄ λͺ¨λ‘ λ™μΌν•œ 여백이 지정됨

    - layout_marginLeft, layout_marginRight, layout_marginTop, layout_marginBottom 으둜 4면의 κ°œλ³„ μ—¬λ°± 지정 κ°€λŠ₯

 

νŒ¨λ”©(padding)

- λ‚΄λΆ€ μ—¬λ°±, 즉 뷰와 뷰의 λ‚΄μš©λ¬Ό μ‚¬μ΄μ˜ 곡간

- 4λ©΄ λͺ¨λ‘ λ™μΌν•œ 여백이 지정됨

    - paddingLeft, paddingTop, paddingRight, paddingBottom 으둜 4면의 κ°œλ³„ μ—¬λ°± 지정 κ°€λŠ₯

 

λ§ˆμ§„ κ΄€λ ¨ 속성

XML 속성 μ„€λͺ…
layout_margin μƒν•˜μ’Œμš° λ„€ λ°©ν–₯ λ§ˆμ§„μ„ μ§€μ •ν•œλ‹€
layout_marginTop μœ„μͺ½ λ§ˆμ§„μ„ μ§€μ •ν•œλ‹€.
layout_marginBottom μ•„λž˜μͺ½ λ§ˆμ§„μ„ μ§€μ •ν•œλ‹€.
layout_marginLeft μ™Όμͺ½ λ§ˆμ§„μ„ μ§€μ •ν•œλ‹€.
layout_marginRight 였λ₯Έμͺ½ λ§ˆμ§„μ„ μ§€μ •ν•œλ‹€.

 

νŒ¨λ”©κ΄€λ ¨ 속성

XML 속성 μ„€λͺ…
padding μƒν•˜μ’Œμš° λ„€ λ°©ν–₯ νŒ¨λ”©μ„ μ§€μ •ν•œλ‹€
paddingTop μœ„μͺ½ νŒ¨λ”©μ„ μ§€μ •ν•œλ‹€.
paddingBottom μ•„λž˜μͺ½ νŒ¨λ”©μ„ μ§€μ •ν•œλ‹€.
paddingLeft μ™Όμͺ½ νŒ¨λ”©μ„ μ§€μ •ν•œλ‹€.
paddingRight 였λ₯Έμͺ½ νŒ¨λ”©μ„ μ§€μ •ν•œλ‹€.

 

baselineAligned 속성

- 크기가 λ‹€λ₯Έ μœ„μ ―λ“€μ„ 보기 μ’‹κ²Œ 정렬함 

- true와 false 값을 지정할 수 있음

    (a) : λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒμ— baselineAlignedλ₯Ό false둜 지정

    (b) : μƒλž΅ν•˜κ±°λ‚˜ true둜 지정

 

layout_weight 속성

- 쀑볡 λ¦¬λ‹ˆμ–΄ λ ˆμ΄μ•„μ›ƒμ—μ„œ μ‚¬μš©λ¨

    - λ¦¬λ‹ˆμ–΄λ ˆμ΄μ•„μ›ƒμ„ μ—¬λŸ¬ 개 μ‚¬μš©ν•  경우 각 λ ˆμ΄μ•„μ›ƒμ˜ 크기λ₯Ό 지정해야 함

    - λ ˆμ΄μ•„웃을 ν™”λ©΄ 전체에 μ±„μ›Œμ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 주둜 전체 화면에 λŒ€ν•œ λΉ„μœ¨(%)둜 지정함

      → λΉ„μœ¨μ— 따라 λΆ€λͺ¨ λ ˆμ΄μ•„μ›ƒμ˜ 남은 μ˜μ—­μ„ μ°¨μ§€ν•˜λŠ” λΉ„μœ¨μ΄ 결정됨

β€» λΉ„μœ¨μ΄ 1:1이라도 λ˜‘κ°™μ§€ μ•Šμ„ 수 있음

β€» layout_weight 속성이 μžˆλŠ” μœ„μ ―λ§Œ 남은 곡간을 차지함

 

 


λ λŸ¬ν‹°λΈŒ λ ˆμ΄μ•„μ›ƒ(RelativeLayout)

- μœ„μ ―κ³Ό λΆ€λͺ¨μ™€μ˜ μœ„μΉ˜ 관계 λ˜λŠ” μœ„μ ―λΌλ¦¬μ˜ 관계λ₯Ό μ§€μ •ν•¨μœΌλ‘œμ¨ λ·°λ₯Ό 배치

 

λΆ€λͺ¨ λ·°λ₯Ό κΈ°μ€€μœΌλ‘œ μœ„μΉ˜ 지정

- μžμ‹ 뷰의 κΈ°λ³Έ μœ„μΉ˜

    - λΆ€λͺ¨ 뷰의 쒌츑 μƒλ‹¨μ΄μ§€λ§Œ λ‹€μ–‘ν•œ layout_~ 속성을 μ΄μš©ν•΄ 자유둭게 μœ„μΉ˜ 지정

 

λ‹€λ₯Έ μœ„μ ―μ˜ μƒλŒ€ μœ„μΉ˜μ— 배치

- λ λŸ¬ν‹°λΈŒλ ˆμ΄μ•„μ›ƒ μ•ˆμ—μ„œ λ‹€λ₯Έ μœ„μ ―μ˜ νŠΉμ •ν•œ 곳에 λ°°μΉ˜ν•˜λŠ” 방법도 있음

    - 각 μ†μ„±μ˜ κ°’μ—λŠ” λ‹€λ₯Έ μœ„μ ―μ˜ 아이디λ₯Ό μ§€μ •ν•˜λ©΄ λ˜λŠ”λ° “@+id/μ‹λ³„μž”와 같은 ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•¨

    - λ‹€λ₯Έ μœ„μ ―κ³Ό κ΄€λ ¨λœ 속성은 λ‹€μŒ κ·Έλ¦Όκ³Ό κ°™μŒ

 


ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒ(TableLayout)

- μœ„μ ―μ„ ν‘œν˜•νƒœλ‘œ λ°°μΉ˜ν•  λ•Œ 주둜 μ‚¬μš©

- <TableRow>와 ν•¨κ»˜ μ‚¬μš©

    - ν–‰μ˜ 수 : 의 수

    - μ—΄μ˜ 수 : μ•ˆμ— ν¬ν•¨λœ μœ„μ ―μ˜ 수

 

ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒμ˜ 속성

layout_span

- ν…Œμ΄λΈ”λ ˆμ΄μ•„μ›ƒ μ•ˆμ— ν¬ν•¨λœ μœ„μ ―μ— μ„€μ •ν•˜λŠ” 속성

- 열을 ν•©μ³μ„œ ν‘œμ‹œν•˜λΌλŠ” 의미

    - 예λ₯Ό λ“€μ–΄ layout_span=“2”λŠ” ν˜„μž¬ μ…€λΆ€ν„° 2개의 셀을 ν•©μ³μ„œ ν‘œμ‹œν•¨ 

 

layout_column

- ν…Œμ΄λΈ”λ ˆμ΄μ•„μ›ƒ μ•ˆμ— ν¬ν•¨λœ μœ„μ ―μ— μ„€μ •ν•˜λŠ” 속성

- μ§€μ •λœ 열에 ν˜„μž¬ μœ„μ ―μ„ ν‘œμ‹œ 

 

stretchColumns

- <TableLayout> μžμ²΄μ— μ„€μ •ν•˜λŠ” 속성

- μ§€μ •λœ μ—΄μ˜ λ„ˆλΉ„λ₯Ό λŠ˜λ¦¬λΌλŠ” 의미

    - stretch Columns=“*”λŠ” 각 셀을 λͺ¨λ‘ 같은 크기둜 ν™•μž₯ν•˜μ—¬ 전체 화면이 꽉 μ°¨λŠ” 효과λ₯Ό 냄

    - μ—΄ λ²ˆν˜ΈλŠ” 0λ²ˆλΆ€ν„° μ‹œμž‘