안드로이드/androidstudio

[Android] 동적으로 View, Layout 크기, 위치 변경 (LayoutParams)

안드로이드멩이 2023. 10. 12. 11:25

 안녕하세요. 이번 포스팅에서는 버튼이나 특정 조작, 조건에 맞춰 view 혹은 layout의 크기나 위치를 변경하는 방법을 포스팅하겠습니다.

 xml로 ui 개발을 한다면 xml파일 미리 다 그려둔 상태일겁니다. 근데 개발을 하다보면 조건에따라 특정 view 혹은 layout에 대해 위치나 크기 등을 변경해야할때가 있습니다.

 이럴때 컴포즈가 아니라면 layoutParams를 통해서 수정이 가능합니다.

간단한 코드로 먼저 보겠습니다.

val layoutParams = ConstraintLayout.LayoutParams(
	ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT)

 최초 정의시 layout의 width와 height 을 인자로 넣습니다. 이후 각 layout에 맞춰 추가적인 요소 margin이나 padding 값, 각 layout에 맞춰 위치값도 수정이 가능합니다!

binding.특정view.layoutParams = 
 ConstraintLayout.LayoutParams(
                    ConstraintLayout.LayoutParams.MATCH_PARENT,
                    ConstraintLayout.LayoutParams.MATCH_PARENT
                ).apply {
                    startToStart = ConstraintLayout.LayoutParams.PARENT_ID
                    endToEnd = ConstraintLayout.LayoutParams.PARENT_ID
                    topToBottom = binding.다른view.id
            }

 위와 같이 원하는 layout을 지정하여 LayoutParams로 width와 height 세팅 후 apply를 통해 다른 크기, 위치 등을 세팅하면 변경이 가능합니다.

 이떄 만약 크기를 명확한 값으로 고정하려면 dp 값을 사용하는데 px 단위로 되어있어 값 조정이 필요합니다.

 

위 과정을 통해서 xml에 작성되어있던  ui를 상황에 맞춰 동적으로 변경이 가능합니다.

다만 특정 상황에 맞춰 변경이 바로 안될경우 poostDelay 등 지연을 통해서도 변경되도록 할수있습니다.