728x90
반응형
LayoutParams 란?
Kotlin(Android)에서 Activity에서 View를 코드로 동적으로 추가할 때 LayoutParams는 부모 레이아웃에 맞춰 뷰의 크기와 위치를 지정하는 필수 요소이다.
- 뷰의 너비(width), 높이(height), 여백(margin), 정렬 방식 등을 지정하는 객체
- 부모 레이아웃 종류에 따라 다른 LayoutParams 클래스를 사용
예시 : TextView의 너비는부모에 맞추고, 높이는 내용만큼 설정해라.▽
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
myTextView.layoutParams = layoutParams
핵심 구성요소
| 요소 | 설명 |
| width | View의 너비 (px, MATCH_PARENT, WRAP_CONTENT, 숫자 등) |
| height | View의 높이 |
| margin | 바깥 여백 (위, 아래, 좌우) |
| gravity | View 내부 콘텐츠의 정렬 |
| weight | LinearLayout에서 뷰들 간 비율 분배 |
반드시 기억할 점
LayoutParams는 부모 레이아웃에 따라 달라져야 한다.
잘못 된 LayoutParams를 사용하면 앱이 터지거나 뷰가 안보일 수 있다.
| 부모 레이아웃 | LayoutParams |
| LinearLayout | LinearLayout.LayoutParams |
| RelativeLayout | RelativeLayout.LayoutParams |
| FrameLayout | FrameLayout.LayoutParams |
| ConstraintLayout | ConstraintLayout.LayoutParams |
| GridLayout | GridLayout.LayoutParams |
Layout 별 예시
1. LinearLayout
val textView = TextView(this).apply {
text = "Hello"
textSize = 20f
}
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
layoutParams.setMargins(16, 16, 16, 16)
textView.layoutParams = layoutParams
linearLayout.addView(textView)
2. GridLayout
val gridLayout = findViewById<GridLayout>(R.id.gridLayout)
val button = Button(this).apply {
text = "1"
}
val params = GridLayout.LayoutParams().apply {
width = 0
height = WRAP_CONTENT
columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f) //이 View가 어느 **열(column)**에 들어갈지, 몇 칸 차지할지
rowSpec = GridLayout.spec(GridLayout.UNDEFINED) // 어느 **행(row)**에 들어갈지, 몇 칸 차지할지
setMargins(8, 8, 8, 8)
}
gridLayout.addView(button, params)
- GridLayout.spec() 상세
GridLayout.spec(start: Int, size: Int, weight: Float = 0f)
// 열 2번째(인덱스 1)에서 시작해서 2칸 차지, 비율은 1
columnSpec = GridLayout.spec(1, 2, 1f)728x90
반응형
'개발 > Android' 카테고리의 다른 글
| [Android] registerOnPageChangeCallback 란? (0) | 2025.06.25 |
|---|---|
| [Android] You need to use a Theme.AppCompat theme (or descendant) with this activity (0) | 2025.06.02 |
| [Android] Preference 정리 (0) | 2025.05.12 |
| [Android] Service를 통한 Activity 전환 (0) | 2025.05.09 |
| [Android] Annotaion 개념 정리 및 예제 (0) | 2025.05.07 |