안드로이드 스튜디오는, 자바 및 코틀린 언어를 기반으로 모바일 전용 앱을 만들기 위한 개발 툴이다. 이 안드로이드 스튜디오에는, 화면을 구성하는 레이아웃(layout) 이라는 항목이 있다. 이 레이아웃으로 화면 구상을 조정할 수 있다. 크게 LinearLayout (순차적 배치), RelativeLayout (상대적 위치 지정), FrameLayout (겹쳐 쌓기), ConstraintLayout (제약 조건을 이용한 유연한 배치) 로 4가지가 있고, 이 포스팅에서는 그중 ConstraintLayout 에 대해서 설명할 것이다.
컨스트레인트레이아웃은, 오브젝트에 다양한 제약을 걸어서 위치를 오브젝트와 스크린과의 관계로 조정하는 기능이다. 제약을 거는거라 자유롭게 위치를 옮기기엔 조금 빡센 느낌이 있지만, 그런 만큼 화면 크기가 어떻든 버그나 잘리는 일이 거의 없다고 볼 수 있다. 이 기능을 사용하는 이유는, 사람들마다 사용하는 핸드폰의 기종이 모두 다르고, 패드같은걸로 보는사람도 있기 때문에, 화면 크기에 관계없이 특정 오브젝트간의 거리를 정하거나, 화면 비율에 따라 어디 위치에 배치하거나, 스크린 벽면에 붙이기 등의 제약을 걸어 화면 크기에 따라 적절한 위치에 모두 같게 배치되도록 하기 위함이다.
그럼 예제를 통해 사용법을 설명하겠다.

한 오브젝트를 생성하게 된다면, .xml 파일에 다음과 같은 코드들이 뜨게 될 것이다. 이 레이아웃은 .xml 에서 조정할 수 있다.

여기에 layout 항목에 보면 .xml 파일들이 있는걸 볼수 있다. 여기서 파일 골라서 수정하면 된다.

.xml 파일에 들어간다면, 저 오른쪽에 줄 세개 아이콘, 줄과 네모 아이콘, 사진모양 아이콘이 있을 텐데, 줄 모양 아이콘을 누르면 .xml 에 레이아웃 조정 코드 수정하는 부분, 줄과 네모 아이콘은 미리보기 창과 코드 수정하는 부분, 사진 모양은 미리보기 창만 띄우는 것이다, 나는 보통 줄과 네모 아이콘으로 오브젝트를 끌어오고, 미리보기로 확인하며 레이아웃 코드를 수정하며 사용한다.
다시 저 맨 위의 코드를 살펴보자, 텍스트뷰 옵션을 살펴보면 app:layout_constraint방향_to방향Of="연결할 부분" 이라는 코드가 보일 것이다. parent 는 스크린 모서리를 말하는 것이다. 저 코드는, 그 오브젝트의 방향1 부분을 연결할 부분의 방향2에 붙이겠다는 것이다.
예를 들어, app:layout_constraintBottom_toBottomOf="parent" 이 코드는, 이 오브젝트의 bottom(바닥) 부분을 parent(스크린)의 bottom(바닥)부분에 붙이겠다는 의미이다. 이렇게 한다면 저 오브젝트는 핸드폰 화면 제일 아래 홈버튼 부분쪽에 붙어 나올 것이다. 이런 식으로 방향을 서로 조정해가며 위치를 설정할 수 있다. 방향은 start(왼쪽) / end(오른쪽) / top(위) / bottom(바닥) 으로 조정할 수 있고, 이 네부분을 모두 parent 와 연결한다면, 서로 당겨 화면 한가운데에 비치되게 된다, 이런식으로 왼쪽 오른쪽, 위 바닥 끼리만 연결해 좌우기준 가운데, 위아래기준 가운데에도 비치할 수 있다. 컨스트레인트레이아웃을 사용한 위치조정 기능은 더욱 많지만, 일단 가장 기본적이고 많이 사용하는 부분만 정리해보았다. 코드들은 구글링하면서 찾아보면 기능은 금방 익히게 되기 때문에 이 포스팅의 목적은 컨스트레인트 레이아웃의 원리와 설정 방식을 이해하는것이기 때문이다. 이만 포스팅을 마치겠다.
