Development record of developer who study hard everyday.

레이블이 ConstraintLayout동적뷰할당인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ConstraintLayout동적뷰할당인 게시물을 표시합니다. 모든 게시물 표시
, ,

안드로이드 ConstraintLayout에 동적으로 뷰 할당하기

ConstraintLayout 동적 뷰 할당

안드로이드 블로그

회사에서 프로젝트 추가 개발에 들어갔다.

커스텀 뷰를 동적으로 할당해야하는 상황이 있었는데 레이아웃이 ConstraintLayout이였다.

동적으로 뷰를 추가할 때는 LinearLayout을 주로 쓴다는 것을 알았지만 이번에는 ConstraintLayout에 동적으로 뷰를 추가해보려고 도전해봤다.

한 번 해봤지만 이번이 마지막일 것 같다. ㅋㅋ

LinearLayout에 뷰를 추가하는 것보다 복잡해서 굳이 다시하고싶지가 않다.

참고한 StackOverFlow 링크는 아래와 같다.


모든 코드를 자세히 적기는 힘들고 큰 틀에서 작업 순서만 확인하길 바란다.

val constraintSet = ConstraintSet()    //1

imageSlider = GolfLandImageSlider(context, adImgCount = imgList.length())    //2
imageSlider.id = View.generateViewId()    //3
imageSlider.layoutParams =    //4
ViewGroup.LayoutParams
(ConstraintLayout.LayoutParams.MATCH_CONSTRAINT,
ConstraintLayout.LayoutParams.MATCH_CONSTRAINT)
constLayout.addView(imageSlider)    //5
constraintSet.clone(constLayout)    //6

constraintSet.connect(imageSlider.id, ConstraintSet.TOP, R.id.guideLine, ConstraintSet.BOTTOM)    //7
constraintSet.connect(imageSlider.id, ConstraintSet.BOTTOM, R.id.moreBtn, ConstraintSet.TOP)
constraintSet.connect(imageSlider.id, ConstraintSet.START, R.id.const_layout, ConstraintSet.START)
constraintSet.connect(imageSlider.id, ConstraintSet.END, R.id.const_layout, ConstraintSet.END)
constraintSet.applyTo(constLayout)    //8
1 => ConstraintSet 객체 만들기

2 => 커스텀 뷰 객체 만들기

3 => 커스텀 뷰 id 할당

4 => 커스텀 뷰 layoutParams 할당
이때, ConstraintLayout.LayoutParams.MATCH_CONSTRAINT가 0dp를 말한다. ㅎ

5 => constLayout(커스텀 뷰를 할당할 ConstraintLayout)에 커스텀 뷰를 추가한다.

6 => constLayout(커스텀 뷰를 할당할 ConstraintLayout)의 제약조건을 constraintSet에 clone한다.

7 => constraintSet에 커스텀뷰의 제약조건을 설정한다.

ConstraintSet.connect(주체가 될 뷰 id, 주체가 될 뷰의 방향, 제약조건의 대상 뷰 id, 제약조건의 대상 뷰의 방향)

예를 들어, 
constraintSet.connect(imageSlider.id, ConstraintSet.TOP, R.id.guideLine, ConstraintSet.BOTTOM)
|| 같은 뜻
app:layout_constraintTop_toBottomOf="@id/guideLine"
8 => 설정한 제약조건을 constLayout(ConstraintLayout)에 적용한다.


위에 첨부한 스택오버플로우 링크를 읽어보니까 ConstraintLayout에 뷰를 할당할 때는 순서가 되게 중요하다고한다.

일단, 모든 childView를 ConstraintLayout에 addView하고나서 ConstraintSet을 clone해야한다.









Share:
Read More