Android ConstranitLayout
업데이트:
카테고리: Android
/무엇을 배우는가
ConstraintLayout
사용ConstraintLayout
에서 텍스트 정렬- view 그룹을 수직, 수평 연결 만들기
ConstraintLayout이란?
유연한 방식으로 하위 요소의 위치를 지정하고 크기를 조정할 수 있는 View 그룹이다.
ConstraintLayout
을 사용하면 크고 복잡한 레이아웃을 사용할 수 있다.
Constraints
두 UI 요소 사이의 연결 또는 정렬이다.
ConstraintLayout
은 수평, 수직으로 하나의 연결은 꼭 필요하다.
1. ConstraintLayout의 기본설정
디자인 탭에 상단을 보면 🧲 생긴 버튼이 있다.
해당 버튼은 요소 추가시 자동으로 Constraint를 설정해준다.
자석버튼 옆에는 요소 추가시 자동으로 설정되는 간격을 설정할 수 있다.
Cosntraint 스타일
요소의 속성을 보면 왼쪽과 아래쪽에 바가 존재하는데 이것은 Constraint bias
라고 한다.
이 축에 따라 요소 사이의 거리가 결정된다.
그리고 박스 내부를 보면 >>>
의 기호가 있다.
>>>
Wrap Content: 내부에 들어있는 내용만큼 뷰를 확장한다.|--|
Fixed: 고정된 치수를 정한다.|-/-/-/-|
Match Constraints: 부모요소에 맞춰서 연결하게 된다.
Chain 스타일
Chain Head가 되는 부분에 layout_constraintVertical_chainStyle
를 추가해준다.
또는 원하는 요소를 선택하고 우클릭으로 Chain을 만들어준다.
Spread
: 기본 옵션, 요소와 벽사이 구간에 일정 간격이 존재Spread inside
: 요소 내부의 간격만 동일한게 설정, 양 끝 요소는 벽에 붙어있음Packed
: 요소들이 붙어있고 양 끝에 일정 간격으로 벌어져 있다.Weighted
: 가중치, 전체구간에서 해당 요소가 얼마나 차지하는지 결정
baseline 설정
요소를 우클릭하면 최상단에 BaseLine 표시 여부가 있다.
클릭하면 요소 하단에 긴 바가 생기게 되고 이것을 다른 요소와 연결하면 정렬상태를 설정할 수 있다.
이것을 설정하게 되면 연결된 요소 중 하나만이라도 Constraint를 설정하면 같이 움직이게 된다.
2. 같은 함수를 다른 요소에 적용하기
private fun makeColored(view: View) {
when (view.id) {
R.id.box_one_text -> view.setBackgroundResource(R.drawable.green)
R.id.box_two_text -> view.setBackgroundResource(R.drawable.green)
R.id.box_three_text -> view.setBackgroundResource(R.drawable.green)
R.id.box_four_text -> view.setBackgroundResource(R.drawable.green)
R.id.box_five_text -> view.setBackgroundResource(R.drawable.green)
else -> view.setBackgroundColor(Color.LTGRAY)
}
}
private fun setListeners() {
val boxOneText = findViewById<TextView>(R.id.box_one_text)
val boxTwoText = findViewById<TextView>(R.id.box_two_text)
val boxThreeText = findViewById<TextView>(R.id.box_three_text)
val boxFourText = findViewById<TextView>(R.id.box_four_text)
val boxFiveText = findViewById<TextView>(R.id.box_five_text)
val rootConstraintLayout = findViewById<View>(R.id.constraint_layout)
// 클릭 가능한 요소들을 리스트로 제작
val clickableViews: List<View> = listOf(boxOneText, boxTwoText, boxThreeText, boxFourText, boxFiveText)
// 해당 요소들에 모두 clickListener를 연결한다.
for (item in clickableViews) {
item.setOnClickListener{
makeColored(it)
}
}
}