Skip to content

Latest commit

ย 

History

History
276 lines (133 loc) ยท 13.5 KB

ConstraintLayout.md

File metadata and controls

276 lines (133 loc) ยท 13.5 KB

ConstraintLayout

Android ConstraintLayout์— ๋Œ€ํ•˜์—ฌ

์ž‘์„ฑ์ž : ๋ฐ•ํƒœ์ž„

Present Time : 2018โ€“07-30-MON


1. ConstraintLayout, ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ฃ ?

1.1 ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •

3๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ view๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ๋‹ค.

  1. ์ธก์ • (Measurement)
  2. ๋ ˆ์ด์•„์›ƒ (Layout)
  3. ๊ทธ๋ฆฌ๊ธฐ (Draw)

์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ๊ฐ–๊ฒŒ๋˜๋ฉด, ์‹œ์Šคํ…œ์€ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ root node๋ฅผ ์š”์ฒญํ•œ๋‹ค.

Measure ๋‹จ๊ณ„ ์—์„œ๋Š” view์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ธก์ •์€ root๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉฐ, ๊ฐ๊ฐ์˜ ํ˜ธ์ถœ์€ ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ์ธ์ž๋“ค๊ณผ ํ•จ๊ป˜ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์ธ์ž๋“ค์€ widthMeasureSpec, heightMeasureSpec์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

Layout ๋‹จ๊ณ„ ์—์„œ๋Š” ๊ฐ๊ฐ์˜ view ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ view์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. root๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด leaf๋…ธ๋“œ๊นŒ์ง€ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

Draw ๋‹จ๊ณ„ ๋Š” ์ตœ์ข…์ ์œผ๋กœ ๋ทฐ๋ฅผ ์บ”๋ฒ„์Šค์œ„์— ์‹ค์ œ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์ด๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ์„ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, ์ž์‹๋“ค์—๊ฒŒ ์ž์‹ ๋“ค์„ ์ธก์ •ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋˜๋ฉฐ ๋ชจ๋“  view๊ฐ€ ์ธก์ •๋  ๋•Œ๊นŒ์ง€ ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ค‘์ฒฉ๋œ ๋ ˆ์ด์•„์›ƒ์ด ๋งŽ์„ ์ˆ˜๋ก ์ธก์ •ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋„ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.


1.2 ConstraintLayout์„ ์‚ฌ์šฉํ•˜๋ฉด?

์•ˆ๋“œ๋กœ์ด๋“œ ์„ฑ๋Šฅ๊ฐœ์„  ํฌ์ŠคํŒ…์˜ ๋ ˆ์ด์•„์›ƒ ์ตœ์ ํ™” ๋ถ€๋ถ„๊ณผ ์œ„์˜ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์„ ์ฐธ๊ณ ํ•˜๋ฉด

๋ ˆ์ด์•„์›ƒ์„ ์ข๊ณ  ๊นŠ๊ฒŒ ๋งŒ๋“ค๊ธฐ๋ณด๋‹ค, ์–‡๊ณ  ๋„“๊ฒŒ ๋งŒ๋“ค์–ด ๋ ˆ์ด์•„์›ƒ์„ ์ค‘์ฒฉ์„ ์ค„์ด๋ฉด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

constraintlayout_1

[๊ทธ๋ฆผ1] ConstraintLayout VS. ์ค‘์ฒฉ๋œ ์—ฌ๋Ÿฌ ๋ ˆ์ด์•„์›ƒ

ConstraintLayout์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ‰ํ‰ํ•œ(flattened) ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.


1.3 ConstraintLayout์˜ ์žฅ์ 

  • ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋ ˆ์ด์•„์›ƒ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ ์ œ๊ณต
  • ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ ˆ์ด์•„์›ƒ์„ ์ค‘์ฒฉํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ ˆ์ด์•„์›ƒ์˜ ๋ณต์žกํ•ด์ง€์ง€ ์•Š์œผ๋ฉฐ, ๋Ÿฐํƒ€์ž„ ์‹œ์— ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ์„ฑ๋Šฅ๋„ ํ–ฅ์ƒ๋œ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์•ˆ๋“œ๋กœ์ด๋“œ ์žฅ์น˜์˜ ํ™”๋ฉด ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” ๋ทฐ๋กœ ๊ตฌํ˜„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ค ์žฅ์น˜์—์„œ ์•ฑ์ด ์‹คํ–‰๋˜๋”๋ผ๋„ ์‘๋‹ต์„ฑ๊ณผ ์ ์‘์„ฑ์ด ์ข‹์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.



2. ConstraintLayout ๊ตฌ์„ฑ์š”์†Œ์™€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ๋“ค

๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ConstraintLayout๋„ ์ž์‹ ์ด ํฌํ•จํ•˜๋Š” ์‹œ๊ฐ์ ์ธ ์ปดํฌ๋„ŒํŠธ(์œ„์ ฏ)์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ๊ฐ ์ž์‹ ์œ„์ ฏ์— ์„ค์ •๋˜๋Š” ์ œ์•ฝ ์—ฐ๊ฒฐ(constraint connection)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

2.1 Constraints

์ œ์•ฝ์กฐ๊ฑด์€ ๋ ˆ์ด์•„์›ƒ์—์„œ ๋‘ ์œ„์ ฏ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ์œ„์ ฏ์ด ๋ ˆ์ด์•„์›ƒ ๋‚ด์— ๋ฐฐ์น˜๋˜๋Š” ๋ฐฉ์‹์„ ์ œ์–ดํ•œ๋‹ค.

๋˜ํ•œ, ์žฅ์น˜ ํšŒ์ „์— ๋”ฐ๋ฅธ ํ™”๋ฉด ํฌ๊ธฐ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ํ™”๋ฉด์„ ๊ฐ–๋Š” ์žฅ์น˜์—์„œ ๋ ˆ์ด์•„์›ƒ์ด ๋‚˜ํƒ€๋‚  ๋•Œ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ ˆ์ด์•„์›ƒ์ด ์‘๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ Android Studio์˜ Blueprint๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ Blueprint๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

constraintlayout_2


2.2 ์ œ์•ฝ ๋ฐ”์ด์–ด์Šค

๊ธฐ๋ณธ์ ์œผ๋กœ ConstraintLayout์—์„œ๋Š” ๋™์ผํ•œ ์ƒ๋Œ€ ์ œ์•ฝ์„ ์ง€์ •ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์ ฏ์ด ์ˆ˜ํ‰๊ณผ ์ˆ˜์ง ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ค‘์•™์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒ๋Œ€ ์ œ์•ฝ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์œ„์ ฏ์˜ ์œ„์น˜๋ฅผ ์ถ”๊ฐ€๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ConstraintLayout์—์„œ๋Š” ์ œ์•ฝ ๋ฐ”์ด์–ด์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ์ œ์•ฝ ๋ฐ”์ด์–ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ œ์•ฝ์— ์ง€์ •๋œ ๋น„์œจ์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ๋Œ€ ์ œ์•ฝ์„ ๊ฐ–๋„๋ก ์œ„์ ฏ์„ ์œ„์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

bias

์œ„์ ฏ์„ ์„ ํƒํ•˜๋ฉด ์†์„ฑ ์ฐฝ์— ๋‘ ๊ฐœ์˜ ์Šฌ๋ผ์ด๋”๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ด๊ฒƒ์„ ๋งˆ์šฐ์Šค๋กœ ๋Œ๋ฉด ์ˆ˜ํ‰๊ณผ ์ˆ˜์ง ๋ฐฉํ–ฅ์˜ ์ œ์•ฝ ๋ฐ”์ด์–ด์Šค๊ฐ€ ์กฐ์ •๋œ๋‹ค.


2.3 Handles

constraintlayout_3

  • Resize Handle

    • ์œ„์ ฏ์˜ ๊ฐ ๊ผญ์ง€์ ์˜ ์‚ฌ๊ฐํ˜•๋ชจ์–‘
    • ์œ„์ ฏ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•œ๋‹ค.
  • anchor points

    • ๊ฐ ๋ชจ์„œ๋ฆฌ์˜ ์ค‘๊ฐ„์— ์žˆ๋Š” ์›์€ ์•ต์ปคํฌ์ธํŠธ์ด๋ฉฐ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
    • ์•ต์ปค ํฌ์ธํŠธ๋ฅผ ํ•œ๋ฒˆ ๋” ํด๋ฆญํ•˜๋ฉด ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

2.4 Chains

๋‘ ๊ฐœ ์ด์ƒ์˜ ์œ„์ ฏ์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐœ๋…์ด ์ฒด์ธ์ด๋‹ค. ์ฒด์ธ์€ ์ˆ˜์ง ๋˜๋Š” ์ˆ˜ํ‰ ์ถ•์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์œ„์ ฏ๋“ค์˜ ์—ฌ๋ฐฑ๊ณผ ํฌ๊ธฐ๋ฅผ ์ผ๊ด„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒด์ธ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ฒด์ธ ํ—ค๋“œ(chain head)๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฒด์ธ์€ ์ฒด์ธ ํ—ค๋“œ ์œ„์ ฏ์— ์„ค์ •๋œ ์ฒด์ธ ์Šคํƒ€์ผ(chain style) ์†์„ฑ๋“ค์— ์˜ํ•ด ์ œ์–ด๋œ๋‹ค.

2.4.1 ์ฒด์ธ ์Šคํƒ€์ผ

  • Spread ์ฒด์ธ

    ์ฒด์ธ์— ํฌํ•จ๋œ ์œ„์ ฏ๋“ค์ด ์ฒด์ธ ๋‚ด๋ถ€์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์— ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ ๋ฐฐ์น˜๋˜๋ฉฐ ๊ธฐ๋ณธ ์Šคํƒ€์ผ ๊ฐ’์ด๋‹ค.

    chain_spread

  • Spread Inside ์ฒด์ธ

    ์ฒด์ธ์— ํฌํ•จ๋œ ์œ„์ ฏ๋“ค์ด ์ฒด์ธ ํ—ค๋“œ์™€ ์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ ์œ„์ ฏ ์‚ฌ์ด์— ๊ณ ๋ฅด๊ฒŒ ๋ฐฐ์น˜๋œ๋‹ค. ๋‹จ, ํ—ค๋“œ์™€ ๋งˆ์ง€๋ง‰ ์œ„์ ฏ์€ ์ฒด์ธ ๋‚ด๋ถ€์˜ ๊ณต๊ฐ„ ๋ถ„๋ฐฐ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

    chain_spreadinside

  • Weighted ์ฒด์ธ

    ์ฒด์ธ์˜ ๊ฐ ์œ„์ ฏ๋“ค์ด ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์„ ๊ฐ ์œ„์ ฏ์˜ ๊ฐ€์ค‘์น˜ ์†์„ฑ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

    chain_weighted

    Weighted ์ฒด์ธ์€ spread ์ฒด์ธ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ๋ฌธ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฒด์ธ์— ํฌํ•จ๋œ ๋ชจ๋“  ์œ„์ ฏ๋“ค์˜ ํฌ๊ธฐ๊ฐ€ match constraint๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•œ๋‹ค.

    ์œ„์ ฏ์˜ ํฌ๊ธฐ๋ฅผ match constraint๋กœ ์ง€์ •ํ•  ๋•Œ๋Š” ์†์„ฑ์ฐฝ์˜ ํฌ๊ธฐ ์†์„ฑ (horizontal : layout_width / vertical : layout_height ์†์„ฑ) ๊ฐ’์„ 0dp๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

    ์œ„์ ฏ์˜ ํฌ๊ธฐ๊ฐ€ 0dp ๋ผ๋Š” ๊ฒƒ์€ ํฌ๊ธฐ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์œ„์ ฏ์— ์„ค์ •๋œ ์ œ์•ฝ์— ๋งž์ถ”์–ด ํ•ด๋‹น ์œ„์ ฏ์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™ ๊ฒฐ์ •๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

  • Packed ์ฒด์ธ

    ์ฒด์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์œ„์ ฏ๋“ค์ด ๊ฐ„๊ฒฉ ์—†์ด ๋ถ™์–ด์„œ ๋ฐฐ์น˜๋˜๋ฉฐ, ์ฒด์ธ ์™ธ๋ถ€์˜ ์ขŒ์šฐ ๋˜๋Š” ์ƒํ•˜์˜ ๋‚จ๋Š” ๊ณต๊ฐ„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ๋ฐฐ์ •๋œ๋‹ค.

    chain_packed


2.5 Guidelines

์ œ์•ฝ์กฐ๊ฑด์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ํ—ฌํผํด๋ž˜์Šค๋กœ, ๋ทฐ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ทฐ๊ทธ๋ฃน ๋‚ด์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ ๊ธฐ์ค€์„ ์ด๋‹ค.

Guidelines ๊ฐ์ฒด๋Š” ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค.(View.GONE ์ƒํƒœ)


2.6 Margin

ํŠน์ • ์œ„์ ฏ๊ณผ ๋‹ค๋ฅธ ์š”์†Œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ(๋งˆ์ง„)์„ ๋„์šฐ๊ธฐ ์œ„ํ•ด ์ œ์•ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ”์ด์–ด์Šค๊ฐ€ ์กฐ์ •๋˜๋”๋ผ๋„ ํ•ญ์ƒ ์ง€์ •๋œ ๋งˆ์ง„์„ ์œ ์ง€ํ•œ๋‹ค.

๋ฐ”์ด์–ด์Šค๊ฐ€ 100%๋กœ ์„ค์ •๋˜์–ด ์˜ค๋ฅธ์ชฝ์— ๋ถ™์–ด์žˆ๋”๋ผ๋„ ์˜ค๋ฅธ์ชฝ ๋งˆ์ง„์ด 50dp ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ•ญ์ƒ ๋ ˆ์ด์•„์›ƒ์˜ ์˜ค๋ฅธ์ชฝ์—์„œ 50dp ๋งŒํผ ๋–จ์–ด์ง„๋‹ค.

margin

๋งˆ์ง„ ๊ฐ’์€ ์†์„ฑ ์ฐฝ์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋“œ๋กญ๋‹ค์šด์„ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ณ , ๊ฐ’์„ ์ง์ ‘ ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค.


2.7 ์ƒ๋Œ€ ์ œ์•ฝ๊ณผ ๋ฐ”์ด์–ด์Šค์˜ ์ค‘์š”์„ฑ

ConstraintLayout์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ƒ๋Œ€ ์ œ์•ฝ๊ณผ ๋งˆ์ง„ ๋ฐ ๋ฐ”์ด์–ด์Šค๊ฐ€ ๋ ˆ์ด์•„์›ƒ ๋””์ž์ธ์˜ ํ•ต์‹ฌ์ด๋‹ค.

๋งŒ์ผ ์ƒ๋Œ€ ์ œ์•ฝ ์—†์ด ์œ„์ ฏ์˜ ์ œ์•ฝ์ด ์—ฐ๊ฒฐ๋˜๋ฉด ๊ธฐ๋ณธ ์ ์œผ๋กœ ๋งˆ์ง„ ์ œ์•ฝ์ด ์„ค์ •๋œ๋‹ค. (๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ๋งˆ์ง„ ๊ฐ’์„ ๊ฐ–๋Š” ์ง์ „์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค.)

๋งˆ์ง„ ์ œ์•ฝ์€ ํ•ญ์ƒ ์ง€์ •๋œ ์—ฌ๋ฐฑ์„ ๋„์šด ํ›„ ์œ„์ ฏ์„ ์œ„์น˜์‹œํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ ์žฅ์น˜๋ฅผ ๊ฐ€๋กœ๋กœ ํšŒ์ „๋˜์–ด ํ™”๋ฉด์˜ ๋†’์ด๊ฐ€ ์ž‘์•„์ง€๋ฉด ํ•˜๋‹จ์— ์œ„์น˜ํ•ด ์žˆ๋Š” ์œ„์ ฏ์€ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

constraintlayout_4

์ด์™€ ๋‹ฌ๋ฆฌ, ์ƒ๋Œ€ ์ œ์•ฝ์œผ๋กœ ์ˆ˜ํ‰๊ณผ ์ˆ˜์ง ๋ฐฉํ–ฅ์˜ ๋ฐ”์ด์–ด์Šค๋ฅผ ์„ค์ •ํ•˜๋ฉด ์žฅ์น˜ ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๋”๋ผ๋„ ๊ทธ๊ฒƒ์˜ ํ™”๋ฉด ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ์ผ์ •ํ•œ ์œ„์น˜์— ์œ„์ ฏ์ด ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋‹ค.

constraintlayout_5

๊ฒฐ๋ก ์ ์œผ๋กœ, ์œ ์—ฐํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ƒ๋Œ€ ์ œ์•ฝ๊ณผ ์ œ์•ฝ ๋ฐ”์ด์–ด์Šค๋ฅผ ๊ฐ™์ด ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.



3. ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

3.1 XML ์ง์ ‘ ์ž‘์„ฑ VS. ๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์˜ ๋””์ž์ธ ๋ชจ๋“œ ์‚ฌ์šฉ

ConstraintLayout์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•  ๋•Œ, ๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์˜ ํ…์ŠคํŠธ ๋ชจ๋“œ์—์„œ XML์„ ์ง์ ‘ ์ž‘์„ฑํ•  ๊ฒƒ์ธ์ง€, ๋””์ž์ธ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋Š” ๊ฐ์ž์˜ ์ทจํ–ฅ์— ๋‹ฌ๋ ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋””์ž์ธ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์žฅ์ ์ด ๋งŽ๋‹ค.

  • XML์„ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋ฏ€๋กœ ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌ

  • ์•ˆ๋“œ๋กœ์ด๋“œ SDK์˜ ๊ฐ์ข… ๋ทฐ ํด๋ž˜์Šค๋“ค์ด ๊ฐ–๋Š” ์†์„ฑ๊ณผ ๊ฐ’์„ ์ž์„ธํžˆ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.

    (๊ตณ์ด ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฌธ์„œ๋ฅผ ์ผ์ผ์ด ์ฐพ์ง€ ์•Š์•„๋„ ์†์„ฑ ์ฐฝ์—์„œ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ.)

๊ทธ๋Ÿฌ๋‚˜ ๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์˜ ๋””์ž์ธ ๋ชจ๋“œ์™€ ํ…์ŠคํŠธ ๋ชจ๋“œ๋Š” ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ด์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ ๋””์ž์ธ ๋ชจ๋“œ์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ๊ทธ๋ฆฌ๋“ฏ์ด ์ž‘์„ฑํ•˜๋ฉด XML์ด ์ž๋™ ์ƒ์„ฑ๋˜๋ฉฐ, ํ…์ŠคํŠธ ๋ชจ๋“œ์—์„œ๋Š” ๊ทธ XML์„ ์‚ฌ์šฉํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋ฅผ ๋ฒˆ๊ฐˆ์•„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ ˆ์ด์•„์›ƒ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.


3.2 ๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ

๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ์ œ์•ฝ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑ ๋ฐ ๋ณ€๊ฒฝํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๊ฒƒ์€ ์ž๋™ ์—ฐ๊ฒฐ๊ณผ ์ œ์•ฝ ์ถ”๋ก  ๋ฐ ์ˆ˜๋™ ์—ฐ๊ฒฐ์ด๋‹ค.

3.2.1 ์ž๋™์—ฐ๊ฒฐ

์ž๋™์—ฐ๊ฒฐ(Autoconnect)์€ ์ œ์•ฝ์„ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ, ์ž์„์ฒ˜๋Ÿผ ์ƒ๊ธด Autoconnect ํˆด๋ฐ” ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•ด์„œ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”๋ฅผ ์ƒํ˜ธ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋™์—ฐ๊ฒฐ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ๋ ˆ์ด์•„์›ƒ์— ์œ„์ ฏ์„ ๋Œ์–ด ๋†“์œผ๋ฉด ์ž๋™์œผ๋กœ ์ œ์•ฝ ์—ฐ๊ฒฐ์ด ์ถ”๊ฐ€๋œ๋‹ค.

autoconnect

์ž๋™ ์—ฐ๊ฒฐ์—์„œ๋Š” ๋ ˆ์ด์•„์›ƒ์— ์ถ”๊ฐ€๋˜๋Š” ์œ„์ ฏ๊ณผ ์ธ์ ‘ํ•œ ๋ถ€๋ชจ ๋ ˆ์ด์•„์›ƒ ๋ฐ ๋‹ค๋ฅธ ์š”์†Œ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ์œ„์ ฏ์˜ ์ œ์•ฝ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์—์„œ ์ž๋™์œผ๋กœ ์ œ์•ฝ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ๋Š” ์ˆ˜๋™์œผ๋กœ ์ œ์•ฝ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


3.2.2 ์ œ์•ฝ ์ถ”๋ก 

์ œ์•ฝ ์ถ”๋ก (Inference constraints)์—์„œ๋Š” ์ด๋ฏธ ๋ ˆ์ด์•„์›ƒ์— ์ถ”๊ฐ€๋œ ์œ„์ ฏ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ์ œ์•ฝ ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. ์ด๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ™•๋ฅ ์ด ์ˆ˜๋ฐ˜๋œ ๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ž๋™์—ฐ๊ฒฐ์— ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ๋””์ž์ธ(ex.์œ„์ ฏ์ถ”๊ฐ€)์„ ํ•œ ํ›„ ์ œ์•ฝ ์ถ”๋ก  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž๋™์—ฐ๊ฒฐ์ฒ˜๋Ÿผ ์ œ์•ฝ ์ถ”๋ก  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ์—์„œ ๋ถ€์ ํ•ฉํ•œ ์ œ์•ฝ ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ๋Š” ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

inferconstraint


3.2.3 ์ˆ˜๋™ ์—ฐ๊ฒฐ

์ˆ˜๋™์œผ๋กœ ์ œ์•ฝ ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ•ธ๋“ค์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.



4. ๋งˆ๋ฌด๋ฆฌ

4.1 ์†Œ๊ฐ

ConstraintLayout์€ ๊ณต๋ถ€ํ•˜๋ฉด ํ•  ์ˆ˜๋ก ๋งค๋ ฅ์žˆ๊ณ  ์™œ ์•ˆ์“ฐ๋‚˜ ํ•˜๋Š” ์ƒ๊ฐ์„ ๋“ค๊ฒŒํ–ˆ๋‹ค.

์ œ์ผ ๋งค๋ ฅ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ๋ฐ”์ด์–ด์Šค๋ฅผ ์ด์šฉํ•ด ์ƒ๋Œ€์ œ์•ฝ์„ ๋งŒ๋“ค์–ด ํ™”๋ฉด์„ ํšŒ์ „ํ•ด๋„ ๊นจ์ง€์ง€ ์•Š๋Š” ๋ทฐ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ConstraintLayout์„ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์กฐ๊ธˆ ํž˜๋“ค์—ˆ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ ์–ด๋Š์ƒˆ ์ดํ•ด๊ฐ€ ๋˜์–ด์žˆ์–ด์„œ ๋ฟŒ๋“ฏํ•˜๋‹ค. ๋‹ค์Œ๋ถ€ํ„ฐ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๋•Œ๋Š” ๊ผญ ConstraintLayout์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.


4.2 ์ถœ์ฒ˜

๋„์„œ

  • ํ•ต์‹ฌ๋งŒ ๊ณจ๋ผ ๋ฐฐ์šฐ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค3 & ํ”„๋กœ๊ทธ๋ž˜๋ฐ (๋‹ ์Šค๋ฏธ์Šค ์ง€์Œ/์‹ฌ์žฌ์ฒ  ์˜ฎ๊น€)

์›น์‚ฌ์ดํŠธ