Android ConstraintLayout์ ๋ํ์ฌ
์์ฑ์ : ๋ฐํ์
Present Time : 2018โ07-30-MON
3๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ view๊ฐ ํ๋ฉด์ ๋ํ๋๋ค.
- ์ธก์ (Measurement)
- ๋ ์ด์์ (Layout)
- ๊ทธ๋ฆฌ๊ธฐ (Draw)
์กํฐ๋นํฐ๊ฐ ํฌ์ปค์ค๋ฅผ ๊ฐ๊ฒ๋๋ฉด, ์์คํ ์ ์กํฐ๋นํฐ์ root node๋ฅผ ์์ฒญํ๋ค.
Measure ๋จ๊ณ
์์๋ view์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ค. ์ธก์ ์ root๋
ธ๋์์ ์์ํด ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋๋ฉฐ, ๊ฐ๊ฐ์ ํธ์ถ์ ๋ถ๋ชจ๋ก๋ถํฐ ์ ๋ฌ๋ ์ธ์๋ค๊ณผ ํจ๊ป ๋ฐ์ํ๋ค. ์ด ์ธ์๋ค์ widthMeasureSpec, heightMeasureSpec์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ๋ฌ๋๋ค.
Layout ๋จ๊ณ
์์๋ ๊ฐ๊ฐ์ view ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก view์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค. root๋
ธ๋์์ ์์ํด leaf๋
ธ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋๋ค.
Draw ๋จ๊ณ
๋ ์ต์ข
์ ์ผ๋ก ๋ทฐ๋ฅผ ์บ๋ฒ์ค์์ ์ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ด๋ค. ๋ฃจํธ ๋
ธ๋๊ฐ ์์ ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ผ๋ ์์ฒญ์ ๋ฐ์ผ๋ฉด, ์์๋ค์๊ฒ ์์ ๋ค์ ์ธก์ ํ๋ผ๋ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋๋ฉฐ ๋ชจ๋ view๊ฐ ์ธก์ ๋ ๋๊น์ง ์ด๋ฌํ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ค.
๋ฐ๋ผ์, ์ค์ฒฉ๋ ๋ ์ด์์์ด ๋ง์ ์๋ก ์ธก์ ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ๋์ด๋๊ฒ ๋๋ค.
์๋๋ก์ด๋ ์ฑ๋ฅ๊ฐ์ ํฌ์คํ ์ ๋ ์ด์์ ์ต์ ํ ๋ถ๋ถ๊ณผ ์์ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ ์ฐธ๊ณ ํ๋ฉด
๋ ์ด์์์ ์ข๊ณ ๊น๊ฒ ๋ง๋ค๊ธฐ๋ณด๋ค, ์๊ณ ๋๊ฒ ๋ง๋ค์ด ๋ ์ด์์์ ์ค์ฒฉ์ ์ค์ด๋ฉด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
ConstraintLayout์ ์ฌ์ฉํ๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํํํ(flattened) ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์๋ ๋ณต์กํ ๋ ์ด์์์ ์์ฑํ ์ ์๋ค.
- ์ฌ๋ฌ ๋ค๋ฅธ ๋ ์ด์์์ ๋ค์ํ ๊ธฐ๋ฅ์ ํ๋์ ๋ ์ด์์์์ ์ฒ๋ฆฌํ ์ ์๋ ์ ์ฐ์ฑ ์ ๊ณต
- ๋ค๋ฅธ ์ข ๋ฅ์ ๋ ์ด์์์ ์ค์ฒฉํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ ์ด์์์ ๋ณต์กํด์ง์ง ์์ผ๋ฉฐ, ๋ฐํ์ ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ์ฑ๋ฅ๋ ํฅ์๋๋ค.
- ๋ค์ํ ์๋๋ก์ด๋ ์ฅ์น์ ํ๋ฉด ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๋ ๋ทฐ๋ก ๊ตฌํ๋์๊ธฐ ๋๋ฌธ์, ์ด๋ค ์ฅ์น์์ ์ฑ์ด ์คํ๋๋๋ผ๋ ์๋ต์ฑ๊ณผ ์ ์์ฑ์ด ์ข์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ค๋ฅธ ๋ ์ด์์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ConstraintLayout๋ ์์ ์ด ํฌํจํ๋ ์๊ฐ์ ์ธ ์ปดํฌ๋ํธ(์์ ฏ)์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฐ ์์ ์์ ฏ์ ์ค์ ๋๋ ์ ์ฝ ์ฐ๊ฒฐ(constraint connection)์ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์ ์ฝ์กฐ๊ฑด์ ๋ ์ด์์์์ ๋ ์์ ฏ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ ํด๋น ์์ ฏ์ด ๋ ์ด์์ ๋ด์ ๋ฐฐ์น๋๋ ๋ฐฉ์์ ์ ์ดํ๋ค.
๋ํ, ์ฅ์น ํ์ ์ ๋ฐ๋ฅธ ํ๋ฉด ํฌ๊ธฐ ๋ณํ๊ฐ ์๊ธฐ๊ฑฐ๋ ์๋ก ๋ค๋ฅธ ํฌ๊ธฐ์ ํ๋ฉด์ ๊ฐ๋ ์ฅ์น์์ ๋ ์ด์์์ด ๋ํ๋ ๋ ์กํฐ๋นํฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ ์ด์์์ด ์๋ตํ๋ ๋ฐฉ๋ฒ๋ ๋ํ๋ธ๋ค.
์ ์ฝ์กฐ๊ฑด์ ๋ง๋๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ Android Studio์ Blueprint๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก Blueprint๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ConstraintLayout์์๋ ๋์ผํ ์๋ ์ ์ฝ์ ์ง์ ํ๋ค. ๋ฐ๋ผ์ ์์ ฏ์ด ์ํ๊ณผ ์์ง ๋ฐฉํฅ ๋ชจ๋ ์ค์์ ์์นํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์๋ ์ ์ฝ์ ์ฌ์ฉํ๋ฉด์ ์์ ฏ์ ์์น๋ฅผ ์ถ๊ฐ๋ก ์กฐ์ ํ ์ ์๊ฒ ํ๊ธฐ ์ํ์ฌ ConstraintLayout์์๋ ์ ์ฝ ๋ฐ์ด์ด์ค ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ค. ์ ์ฝ ๋ฐ์ด์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋์ ์ ์ฝ์ ์ง์ ๋ ๋น์จ์ ๊ธฐ์ค์ผ๋ก ์๋ ์ ์ฝ์ ๊ฐ๋๋ก ์์ ฏ์ ์์น์ํฌ ์ ์๋ค.
์์ ฏ์ ์ ํํ๋ฉด ์์ฑ ์ฐฝ์ ๋ ๊ฐ์ ์ฌ๋ผ์ด๋๊ฐ ๋ํ๋๋ค. ์ด๊ฒ์ ๋ง์ฐ์ค๋ก ๋๋ฉด ์ํ๊ณผ ์์ง ๋ฐฉํฅ์ ์ ์ฝ ๋ฐ์ด์ด์ค๊ฐ ์กฐ์ ๋๋ค.
-
- ์์ ฏ์ ๊ฐ ๊ผญ์ง์ ์ ์ฌ๊ฐํ๋ชจ์
- ์์ ฏ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
-
- ๊ฐ ๋ชจ์๋ฆฌ์ ์ค๊ฐ์ ์๋ ์์ ์ต์ปคํฌ์ธํธ์ด๋ฉฐ ์ ์ฝ์กฐ๊ฑด์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ์ต์ปค ํฌ์ธํธ๋ฅผ ํ๋ฒ ๋ ํด๋ฆญํ๋ฉด ์ ์ฝ์กฐ๊ฑด์ ์ญ์ ํ ์ ์๋ค.
๋ ๊ฐ ์ด์์ ์์ ฏ์ ํ๋์ ๊ทธ๋ฃน์ฒ๋ผ ๋์ํ ์ ์๊ฒ ํ๋ ๊ฐ๋ ์ด ์ฒด์ธ์ด๋ค. ์ฒด์ธ์ ์์ง ๋๋ ์ํ ์ถ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ, ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋ ์์ ฏ๋ค์ ์ฌ๋ฐฑ๊ณผ ํฌ๊ธฐ๋ฅผ ์ผ๊ด ์กฐ์ ํ ์ ์๋ค.
์ฒด์ธ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฒด์ธ ํค๋(chain head)๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒด์ธ์ ์ฒด์ธ ํค๋ ์์ ฏ์ ์ค์ ๋ ์ฒด์ธ ์คํ์ผ(chain style) ์์ฑ๋ค์ ์ํด ์ ์ด๋๋ค.
-
์ฒด์ธ์ ํฌํจ๋ ์์ ฏ๋ค์ด ์ฒด์ธ ๋ด๋ถ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ ๋ฐฐ์น๋๋ฉฐ ๊ธฐ๋ณธ ์คํ์ผ ๊ฐ์ด๋ค.
-
์ฒด์ธ์ ํฌํจ๋ ์์ ฏ๋ค์ด ์ฒด์ธ ํค๋์ ์ฒด์ธ์ ๋ง์ง๋ง ์์ ฏ ์ฌ์ด์ ๊ณ ๋ฅด๊ฒ ๋ฐฐ์น๋๋ค. ๋จ, ํค๋์ ๋ง์ง๋ง ์์ ฏ์ ์ฒด์ธ ๋ด๋ถ์ ๊ณต๊ฐ ๋ถ๋ฐฐ์ ํฌํจ๋์ง ์๋๋ค.
-
์ฒด์ธ์ ๊ฐ ์์ ฏ๋ค์ด ์ฐจ์งํ๋ ๊ณต๊ฐ์ ๊ฐ ์์ ฏ์ ๊ฐ์ค์น ์์ฑ์ผ๋ก ์ ์ดํ ์ ์๋ค.
Weighted ์ฒด์ธ์ spread ์ฒด์ธ ์คํ์ผ์ ์ฌ์ฉํ ๋๋ฌธ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์ฒด์ธ์ ํฌํจ๋ ๋ชจ๋ ์์ ฏ๋ค์ ํฌ๊ธฐ๊ฐ match constraint๋ก ์ง์ ๋์ด์ผ ํ๋ค.
์์ ฏ์ ํฌ๊ธฐ๋ฅผ match constraint๋ก ์ง์ ํ ๋๋ ์์ฑ์ฐฝ์ ํฌ๊ธฐ ์์ฑ (horizontal : layout_width / vertical : layout_height ์์ฑ) ๊ฐ์ 0dp๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
์์ ฏ์ ํฌ๊ธฐ๊ฐ 0dp ๋ผ๋ ๊ฒ์ ํฌ๊ธฐ๊ฐ ์๋ค๋ ๊ฒ์ด ์๋๊ณ , ์์ ฏ์ ์ค์ ๋ ์ ์ฝ์ ๋ง์ถ์ด ํด๋น ์์ ฏ์ ํฌ๊ธฐ๊ฐ ์๋ ๊ฒฐ์ ๋๋ค๋ ์๋ฏธ์ด๋ค.
-
์ฒด์ธ์ ๊ตฌ์ฑํ๋ ์์ ฏ๋ค์ด ๊ฐ๊ฒฉ ์์ด ๋ถ์ด์ ๋ฐฐ์น๋๋ฉฐ, ์ฒด์ธ ์ธ๋ถ์ ์ข์ฐ ๋๋ ์ํ์ ๋จ๋ ๊ณต๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ๊ฒ ๋ฐฐ์ ๋๋ค.
์ ์ฝ์กฐ๊ฑด์ ์ฝ๊ฒ ์ค์ ํ๋๋ก ๋์์ฃผ๋ ํฌํผํด๋์ค๋ก, ๋ทฐ๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํด ๋ทฐ๊ทธ๋ฃน ๋ด์ ์ค์ ํ ์ ์๋ ์ผ์ข ์ ๊ธฐ์ค์ ์ด๋ค.
Guidelines ๊ฐ์ฒด๋ ํ๋ฉด์ ๋ํ๋์ง ์๋๋ค.(View.GONE ์ํ)
ํน์ ์์ ฏ๊ณผ ๋ค๋ฅธ ์์ ์ฌ์ด์ ๊ฐ๊ฒฉ(๋ง์ง)์ ๋์ฐ๊ธฐ ์ํด ์ ์ฝ์ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ์ด์ด์ค๊ฐ ์กฐ์ ๋๋๋ผ๋ ํญ์ ์ง์ ๋ ๋ง์ง์ ์ ์งํ๋ค.
๋ฐ์ด์ด์ค๊ฐ 100%๋ก ์ค์ ๋์ด ์ค๋ฅธ์ชฝ์ ๋ถ์ด์๋๋ผ๋ ์ค๋ฅธ์ชฝ ๋ง์ง์ด 50dp ์ค์ ๋์ด ์๋ค๋ฉด ํญ์ ๋ ์ด์์์ ์ค๋ฅธ์ชฝ์์ 50dp ๋งํผ ๋จ์ด์ง๋ค.
๋ง์ง ๊ฐ์ ์์ฑ ์ฐฝ์์ ๋ณ๊ฒฝํ ์ ์๋ค. ๋๋กญ๋ค์ด์ ์ฌ์ฉํด๋ ๋๊ณ , ๊ฐ์ ์ง์ ์ ๋ ฅํด๋ ๋๋ค.
ConstraintLayout์ ์ฌ์ฉํ ๋๋ ์๋ ์ ์ฝ๊ณผ ๋ง์ง ๋ฐ ๋ฐ์ด์ด์ค๊ฐ ๋ ์ด์์ ๋์์ธ์ ํต์ฌ์ด๋ค.
๋ง์ผ ์๋ ์ ์ฝ ์์ด ์์ ฏ์ ์ ์ฝ์ด ์ฐ๊ฒฐ๋๋ฉด ๊ธฐ๋ณธ ์ ์ผ๋ก ๋ง์ง ์ ์ฝ์ด ์ค์ ๋๋ค. (๋ ์ด์์ ํธ์ง๊ธฐ์์๋ ๋ง์ง ๊ฐ์ ๊ฐ๋ ์ง์ ์ผ๋ก ๋ณด์ฌ์ค๋ค.)
๋ง์ง ์ ์ฝ์ ํญ์ ์ง์ ๋ ์ฌ๋ฐฑ์ ๋์ด ํ ์์ ฏ์ ์์น์ํจ๋ค. ๋ฐ๋ผ์ ์ฅ์น๋ฅผ ๊ฐ๋ก๋ก ํ์ ๋์ด ํ๋ฉด์ ๋์ด๊ฐ ์์์ง๋ฉด ํ๋จ์ ์์นํด ์๋ ์์ ฏ์ ๋ณผ ์ ์๊ฒ ๋๋ค.
์ด์ ๋ฌ๋ฆฌ, ์๋ ์ ์ฝ์ผ๋ก ์ํ๊ณผ ์์ง ๋ฐฉํฅ์ ๋ฐ์ด์ด์ค๋ฅผ ์ค์ ํ๋ฉด ์ฅ์น ํ๋ฉด์ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋๋ผ๋ ๊ทธ๊ฒ์ ํ๋ฉด ํฌ๊ธฐ์ ๋น๋กํ์ฌ ์ผ์ ํ ์์น์ ์์ ฏ์ด ๋ํ๋ ์ ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ ์ฐํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ ์ด์์์ ์์ฑํ๋ ค๋ฉด ์๋ ์ ์ฝ๊ณผ ์ ์ฝ ๋ฐ์ด์ด์ค๋ฅผ ๊ฐ์ด ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํ๋ค.
ConstraintLayout์ผ๋ก ๋ ์ด์์์ ์์ฑํ ๋, ๋ ์ด์์ ํธ์ง๊ธฐ์ ํ ์คํธ ๋ชจ๋์์ XML์ ์ง์ ์์ฑํ ๊ฒ์ธ์ง, ๋์์ธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง๋ ๊ฐ์์ ์ทจํฅ์ ๋ฌ๋ ธ๋ค. ๊ทธ๋ฌ๋ ๋์์ธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฅ์ ์ด ๋ง๋ค.
-
XML์ ์๋ ์์ฑํด์ฃผ๋ฏ๋ก ๋น ๋ฅด๊ณ ํธ๋ฆฌ
-
์๋๋ก์ด๋ SDK์ ๊ฐ์ข ๋ทฐ ํด๋์ค๋ค์ด ๊ฐ๋ ์์ฑ๊ณผ ๊ฐ์ ์์ธํ ์ ํ์๊ฐ ์๋ค.
(๊ตณ์ด ์๋๋ก์ด๋ ๋ฌธ์๋ฅผ ์ผ์ผ์ด ์ฐพ์ง ์์๋ ์์ฑ ์ฐฝ์์ ๋ฐ๋ก ๋ณผ ์ ์๊ธฐ ๋๋ฌธ.)
๊ทธ๋ฌ๋ ๋ ์ด์์ ํธ์ง๊ธฐ์ ๋์์ธ ๋ชจ๋์ ํ ์คํธ ๋ชจ๋๋ ์ํธ ๋ฐฐํ์ ์ด์ง ์๋ค. ๋ฐ๋ผ์ ๋์์ธ ๋ชจ๋์์ ๋ ์ด์์์ ๊ทธ๋ฆฌ๋ฏ์ด ์์ฑํ๋ฉด XML์ด ์๋ ์์ฑ๋๋ฉฐ, ํ ์คํธ ๋ชจ๋์์๋ ๊ทธ XML์ ์ฌ์ฉํด์ ์ฐ๋ฆฌ๊ฐ ์ง์ ํธ์งํ ์ ์๋ค. ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ๋ฒ๊ฐ์ ์ฌ์ฉํ๋ฉด์ ๋ ์ด์์์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
๋ ์ด์์ ํธ์ง๊ธฐ์์๋ ์ ์ฝ ์ฐ๊ฒฐ์ ์์ฑ ๋ฐ ๋ณ๊ฒฝํ๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ๊ทธ๊ฒ์ ์๋ ์ฐ๊ฒฐ๊ณผ ์ ์ฝ ์ถ๋ก ๋ฐ ์๋ ์ฐ๊ฒฐ์ด๋ค.
์๋์ฐ๊ฒฐ(Autoconnect)์ ์ ์ฝ์ ์๋์ผ๋ก ์ถ๊ฐํด ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ฉฐ, ์์์ฒ๋ผ ์๊ธด Autoconnect ํด๋ฐ ๋ฒํผ์ ์ฌ์ฉํด์ ํ์ฑํ/๋นํ์ฑํ๋ฅผ ์ํธ ์ ํํ ์ ์๋ค.
์๋์ฐ๊ฒฐ์ด ํ์ฑํ๋ ์ํ์์ ๋ ์ด์์์ ์์ ฏ์ ๋์ด ๋์ผ๋ฉด ์๋์ผ๋ก ์ ์ฝ ์ฐ๊ฒฐ์ด ์ถ๊ฐ๋๋ค.
์๋ ์ฐ๊ฒฐ์์๋ ๋ ์ด์์์ ์ถ๊ฐ๋๋ ์์ ฏ๊ณผ ์ธ์ ํ ๋ถ๋ชจ ๋ ์ด์์ ๋ฐ ๋ค๋ฅธ ์์์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ ์์ ฏ์ ์ ์ฝ ์ฐ๊ฒฐ์ ์์ฑํ๋ค. ์ด๋ ๋ด๋ถ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฌ๋ ๋ ์ด์์ ํธ์ง๊ธฐ์์ ์๋์ผ๋ก ์ ์ฝ ์ฐ๊ฒฐ์ ์์ฑํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค. ์ด๋๋ ์๋์ผ๋ก ์ ์ฝ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
์ ์ฝ ์ถ๋ก (Inference constraints)์์๋ ์ด๋ฏธ ๋ ์ด์์์ ์ถ๊ฐ๋ ์์ ฏ๋ค์ ๋์์ผ๋ก ์ ์ฝ ์ฐ๊ฒฐ์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝํด์ค๋ค. ์ด๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํ๋ฅ ์ด ์๋ฐ๋ ๊ฒฝํ์ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๋ค. ์๋์ฐ๊ฒฐ์ ๋นํ์ฑํ๋ ์ํ์์ ๋ ์ด์์์ ๋์์ธ(ex.์์ ฏ์ถ๊ฐ)์ ํ ํ ์ ์ฝ ์ถ๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
๊ทธ๋ฌ๋ ์๋์ฐ๊ฒฐ์ฒ๋ผ ์ ์ฝ ์ถ๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ ๋ ์ด์์ ํธ์ง๊ธฐ์์ ๋ถ์ ํฉํ ์ ์ฝ ์ฐ๊ฒฐ์ ์ถ๊ฐํ ์ ์๋ค. ์ด๋๋ ์๋์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
์๋์ผ๋ก ์ ์ฝ ์ฐ๊ฒฐ์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝํ๋ ค๋ฉด ํธ๋ค์ ์ด์ฉํ๋ฉด ๋๋ค.
ConstraintLayout์ ๊ณต๋ถํ๋ฉด ํ ์๋ก ๋งค๋ ฅ์๊ณ ์ ์์ฐ๋ ํ๋ ์๊ฐ์ ๋ค๊ฒํ๋ค.
์ ์ผ ๋งค๋ ฅ์์๋ ๊ฒ์ ๋ฐ์ด์ด์ค๋ฅผ ์ด์ฉํด ์๋์ ์ฝ์ ๋ง๋ค์ด ํ๋ฉด์ ํ์ ํด๋ ๊นจ์ง์ง ์๋ ๋ทฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด์๋ค.
๋ค๋ฅธ ๋ ์ด์์์ ๊ณ์ ์ฌ์ฉํ๋ค๋ณด๋ ConstraintLayout์ ์ฒ์ ์ ํ์ ๋ ์ดํดํ๊ธฐ๊ฐ ์กฐ๊ธ ํ๋ค์์ง๋ง ์ด๋ ๊ฒ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ๋ค ๋ณด๋ ์ด๋์ ์ดํด๊ฐ ๋์ด์์ด์ ๋ฟ๋ฏํ๋ค. ๋ค์๋ถํฐ ๋ ์ด์์์ ๋ง๋ค๋๋ ๊ผญ ConstraintLayout์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
- ํต์ฌ๋ง ๊ณจ๋ผ ๋ฐฐ์ฐ๋ ์๋๋ก์ด๋ ์คํ๋์ค3 & ํ๋ก๊ทธ๋๋ฐ (๋ ์ค๋ฏธ์ค ์ง์/์ฌ์ฌ์ฒ ์ฎ๊น)
- https://academy.realm.io/kr/posts/constraintlayout-it-can-do-what-now/
- https://academy.realm.io/kr/posts/cool-constraintlayout-droidcon-boston-2017/
- https://academy.realm.io/kr/posts/exploring-new-android-layouts/ (์ด๋ฏธ์ง1 ์ถ์ฒ)