반응형
[Android Knights 2018]
지금은 ConstraintLayout 시대
speaker. 안세원 - 카카오 모빌리티 안드로이드 개발자
- 최근 참여 앱
- 카카오 T 택시 기사용
- 카카오 T
- 카카오톡
Guide, Chain 등에서 부터 최신 업데이트된 기능까지! 혼자 알기 아까운 ConstraintLayout, 복잡한 구조도 한방에 멋지게!
복잡한 레이아웃을 단순한 계층구조를 이용해 표현할 수 있는 View Group
Relative layout과 아주 비슷하지만 유연하고 다양한 기능을 제공함
ex. relative layout에서 4 depth이상 들어가야하는 것도 1 depth로 가능!!!
ConstraintLayout 장점
- Linear Layout을 써야만 했던 뷰 비율 조절도 간단히 가능(depth가 깊어지는 것 방지)
- 뷰 계층 간단히 할 수 있어 유지보수도 좋고 성능도 좋고!
- 구글이 기존의 많은 layout 기능들을 deprecated함. -> constraintLayout을 할 수 밖에 없음 ㅜㅜ
Constraint
- 다른 뷰나 부모 레이아웃과의 정렬조건 / 연결 관계를 나타냄
- layout_constraintp[기준1]_to[기준2]of="[viewId|parent]"
ConstraintLayout
- Top/Bottom/Left/Right를 모두 선언해야 하는 것은 아님
- 생략은 가능하지만 기왕 할거면 상하좌우 모두 선언하는게 나음(가독성 포함)
- match_parent가 아닌 match_constraint
- 0dp크기 : constraint에 꽉 차게 크기를 맞춤.
- Percent size
- 부모 뷰의 크기에 비례하여 뷰의 크기를 결정(padding 제외)
- android:layout_width="match_constraint"
- app:layout_constraintWidth_default="percent"
- app:layout_constraintWidth_percent="0.4"
- 가로/세로 비율
- dimensionRatio : 뷰의 가로/세로 비율 결정
- app:layout_constraintDimensionRatio="1" // 가로/세로 = 1/1
- app:layout_constraintDimensionRatio="1:1" // 가로:세로 = 1:1
- 적어도 한 방향은 match_constraint여야 함!
- 명시적으로 비율을 적용할 축을 지정할 수 있음 : (W|H,)[비율]
- example. 폭 match_constraint, 높이 match_constraint로 설정
H,1:2 -> 폭을 constraint에 맞춰 설정한 후, 비율에 따라 높이를 결정
W,1:2 -> 높이를 constraint에 맞춰 설정한 후, 비율에 따라 폭을 결정 - 뷰 크기 - 최소/최대
- 최소/최대 크기 지정 : app:layout_constraintWidth[min|max]="size"
- android:minWidth와는 다름
- wrap_Content일 땐 android:[min|max]width 적용
- match_constraint일 땐 app:layout_constraintWidth[min|max] 적용
- 위치 지정 - bias
- bias
- guidline
- 가로 또는 세로 축 방향을 가진 가상의 뷰(마치 포토샵의 가이드라인 처럼!!)
- 부모 뷰의 특정 위치를 기준점으로 삼을 때 사용
- 축, 위치 값을 속성으로 가짐
- 축 : android:orientation="[vertical|horizontal]"
- 위치
- app:layout_constraintGuide_begin : 시작지점으로 부터의 거리
- app:layout_constraintGuide_end : 끝 지점으로 부터의 거리
- app:layout_constraintGuide_percent : 시작짖머으로 부터의 % 거리
ConstraintLayout 여러개의 뷰
- chain
- 서로 연결되어 그룹으로 동작하는 뷰의 묶음
- 체인 스타일 종류
마치 web의 부트스트랩 마냥 사용 가능하다! 대박 - 체인 헤드 : 위치 상 체인의 가장 앞쪽(왼쪽 혹은 윗쪽) 에 위치한 뷰
-> xml상에 위에 있는게 헤드가 아님!! - spread : (체인의 constraint 영역 - 뷰 크기의 합)을 균등분할하여 배치
- Barrier
- 여러 뷰의 가장자리 위치에 만드는 가상의 뷰
- 복잡한 양식 등을 만드는데 활용할 수 있음
- <android.support.constraint.Barrier>
app:barrierDirection="right"
app:constraint_refernced_ids="tv_1,tv_2" // tv_1, tv_2 id의 오른쪽 최대 값에 barrier bar를 생성 - Group
- 여러 뷰의 visibility를 한꺼번에 조정(즉 가상의 group을 생성)
- ConstriantSet
- 프로그램적으로 constraint를 만드는 기능
- 일일이 바닥부터 만드러내거나
- 다른 xml로 부터 constraint만 뽑아오거나
- constraintlayout 인스턴스에서뽑아오거나
- 만들어진 constraint를 constraintLayout에 적용할 수 있음
- constrainSet은 constraint만 갱신
- 손쉽게 애니메이션 생성 가능
constraintSet.animation... - Placeholder(가상의 view 위치)
- 가상의 view 위치를 두고, constraint layout에 있던 것을 옮기는 것.
- chain관계의 애니메이션을 손쉽게 구현가능
참고사이트
ConstraitLayout google 제공 웹사이트(링크)
반응형
'개발이야기 > Android' 카테고리의 다른 글
안드로이드에서 외부 jar file import하는 방법 (0) | 2018.12.26 |
---|---|
Custom listview의 각 item에 animation 적용하기 (0) | 2018.12.13 |
app의 강제종료로 인해 FCM cloud messaging 푸시를 받지 못하는 이유? (0) | 2018.09.12 |
[ConstraintLayout] 효과적인 ConstraintLayout 사용방법 (2) | 2018.04.22 |
[Instance app]설치 없이 네이티브앱의 사용경험을 제공할 수 있는 방법 (0) | 2018.04.22 |
구글 게임 플레이 서비스 디버깅 방법 (0) | 2017.09.12 |
안드로이드 HandlerThread 스레드 사용법 (1) | 2017.07.16 |
구글이 기존의 많은 layout 기능들을 deprecated함 <- 이렇게 적어주셨는데, linearlayout이 점진적으로 사라질 수도 있다는 말씀이신지 여쭈어봐도될까요? 만약 점진적으로 사라진다고하면 해당문서가공식홈페이지에 어디에 있는지 여쭈어봐도될까요??
Google은 Android 8.0이 출시되면서 PercentRelativeLayout이 deprecate되었습니다. API문서에 따르면 PercentRelativeLayout을 사용하는 대신ConstraintLayout을 대신 써라고 되어 있습니다.
url : https://developer.android.com/reference/android/support/percent/PercentRelativeLayout
---
여러 계층으로 풀어야할 layout issue들을 ConstraintLayout을 사용함으로서 해결할수 있음을 발표자가 이야기한 것을 제가 축약해서 적어서 오해가 있었던것 같네요. 발표영상 url을 아래에 첨부하오니 영상으로 한번더 확인하시면 좋을것 같아요.
---
발표영상 url : https://www.youtube.com/watch?v=RkqMFLrpaT8