ConstraintLayout
- ๋ณต์กํ ๋ ์ด์์์ ๋จ์ํ ๊ณ์ธต ๊ตฌ์กฐ๋ก ํํํ์ฌ ์ด์ฉํ ์ ์๊ฒํ๋ ViewGroup
- ๋ณต์กํ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ ์ด ์์์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์์ ์์ ๋ก์์ง ์ ์๋ค.
- ํ์ View๋ค๊ณผ ๊ด๊ณ๋ฅผ ์ ์ํด์ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ค๋ ์ ์ด RelativeLayout๊ณผ ๋น์ทํ์ง๋ง, ๋ณด๋ค ์ ์ฐํ๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฅ์
- ๋ณต์กํ ๋ ์ด์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋จ์ํ ๊ตฌ์ฑํ ์ ์๋ค.
- ์์ ๋ทฐ ๊ฐ์ ์ํธ ๊ด๊ณ๋ฅผ ์ ์ ๊ฐ๋ฅํ๋ค.
Constraint (์ ์ฝ ์กฐ๊ฑด)
- view์ ์์น๋ฅผ ์ ์ํ๋ ค๋ฉด ๋ณด๊ธฐ์ ๊ฐ๋ก/์ธ๋ก ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ๊ฐ ํ๋ ์ด์ ์ถ๊ฐํด์ผํ๋ค.
- constraintLayout์์ ์์ ๋ทฐ์ ์์น๋ฅผ ์ก๋ ๊ธฐ์ค
- ๋ค๋ฅธ ๋ทฐ๋ ๋ถ๋ชจ ๋ ์ด์์๊ณผ์ ์ ๋ ฌ์กฐ๊ฑด/ ์ฐ๊ฒฐ ๊ด๊ณ
- layout_constraint[๊ธฐ์ค1]_to[๊ธฐ์ค2]of = "[viewId || parent]"๋ก xml text ์์ฑ
- start, end ์์ฑ์ left, right ์์ฑ๋ณด๋ค ์ฐ์ ๋จ
- Top/ Bottom/ Start/ End ๋ฅผ ๋ชจ๋ ์ ์ธํด์ผ ํ์ง ์์.
- ์ฒด์ธ ๋ฑ ๋ค๋ฅธ ๊ธฐ๋ฅ ์ฌ์ฉ ์ ์์์น ๋ชปํ ๋์ ๋ฐ์ํ ์ ์์์ผ๋ก ์ ๋งํ๋ฉด ๋ค ์ ์ธํด์ฃผ๋ ๊ฒ์ ๊ถ์ฅ.
View ํฌ๊ธฐ - ๊ฐ๋ก/์ธ๋ก ๋น์จ ์ง์
- dimensionRatio : ๋ทฐ์ ๊ฐ๋ก/์ธ๋ก ๋น์จ ๊ฒฐ์
- app:layout_constraintDimensionRatio="1" -> ๊ฐ๋ก/์ธ๋ก 1/1
- app:layout_constraintDimesionRatio ="1:1" ๊ฐ๋ก์ธ๋ก 1:1
- ์ ์ด๋ ํ ๋ฐฉํฅ์ match_constraint ์ด์ฌ์ผ ํ๋ค.
- ๋ ๋ฐฉํฅ ๋ชจ๋ match_constraint์ผ ๊ฒฝ์ฐ, ๋น์จ์ ๋ง์ถฐ constraint๋ด์์ ๊ฐ์ฅ ํฐ ํฌ๊ธฐ๋ก ๊ฒฐ์
Guideline
- android.support.constraint.Guideline
- ๊ฐ๋ก ๋๋ ์ธ๋ก ์ถ ๋ฐฉํฅ์ ๊ฐ์ง ๊ฐ์ฅ์ ๋ทฐ
- ๋ถ๋ชจ ๋ทฐ์ ํน์ ์์น๋ฅผ ๊ธฐ์ค์ ์ผ๋ก ์ผ์ ๋ ์ฌ์ฉ
- ์ถ, ์์น ๊ฐ์ ์์ฑ์ผ๋ก ๊ฐ์ง
-
- ์ถ : andorid : orientation= "[vertical|horizontal]"
- ์์น
- app:layout_constraintGuide_begin:์์์ง์ ์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ
- app:layout_constraintGuide_end : ๋ ์ง์ ์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ
- app:layout_constraintGuide_percent : ์์ ์ง์ ์ผ๋ก๋ถํฐ์ %์์น
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gd_left"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_begin="100dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gd_right"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_end="100dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gd_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.8" />
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:text="hello world"
app:layout_constraintBottom_toBottomOf="@id/gd_bottom"
app:layout_constraintEnd_toEndOf="@id/gd_right"
app:layout_constraintStart_toStartOf="@id/gd_left"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
ConstraintSet
- ํ๋ก๊ทธ๋จ์ ์ผ๋ก constraint๋ฅผ ๋ง๋๋ ๊ธฐ๋ฅ
- ํ๋ํ๋ ๋ฐ๋ฅ๋ถํฐ ๋ง๋ค๊ฑฐ๋
- ๋ค๋ฅธ xml๋ก๋ถํฐ constraint๋ง ๋ฝ์์ค๊ฑฐ๋
- ConstraintLayout ์ธ์คํด์ค์์ ๋ฝ์์ค๊ฑฐ๋ ํ ์ ์๋ค.
- ๋ง๋ค์ด์ง constraint๋ฅผ Constraint์ ์ ์ฉํ ์ ์๋ค.
- ๋์ ์ผ๋ก ConstraintLayout์ ๋ชจ๋ ๋ทฐ ํน์ ์ผ๋ถ ๋ทฐ์ ๋ ์ด์์์ ๊ฐฑ์ ํ ์ ์๋ค.
- ConstraintSet์ constraint๋ง ๊ฐฑ์ ํ๋ฏ๋ก constaint์ ๊ด๋ จ์๋ ์์ฑ
- (padding, text size..)๋ ์ํฅ ๋ฐ์ง ์๋๋ค.
- TransitionManager, beginDelayedTransition()์ ์ด์ฉํด์ ์ ์ฝ๊ฒ ์ ๋์์ด์
์์ฑ ๊ฐ๋ฅํ๋ค.
Reference