Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- CustomView
- CoordinatorLayout
- 안드로이드
- Behavior
- kotlin
- notification
- 백준
- BOJ
- CollapsingToolbarLayout
- Algorithm
- 코틀린
- onLayout
- activity
- room
- Android
- ViewModel
- 알림
- onMeasure
- HTTP
- LiveData
- hilt
- AppBarLayout
- Navigation
- 알고리즘
- Coroutine
- sqlite
- DataBinding
- lifecycle
- recyclerview
- View
Archives
- Today
- Total
개발일지
Android in A..Z - View (MeasureSpec) 본문
MeasureSpec
MeasureSpec은 View의 크기를 정할 때 중요하게 쓰인다. MeasureSpec은 ParentView에서 ChildView로 전달되며 크기에 대한 정보와 MeasureSpec Mode에 대한 정보로 구성되어 있다.
MeasureSpec Mode
- UNSPECIFIED : Mode가 설정되지 않은 경우며 원하는 크기를 가질 수 있다.
- EXACTLY : 정확한 사이즈가 정해진 상태며 정해진 사이즈 안에서 원하는 크기를 가질 수 있다. (match_parent, fill_parent, 500dp 등 정확한 사이즈가 정해진 경우에 할당된다.)
- AT_MOST : 주어진 사이즈에서 원하는 크기를 가질 수 있다. (wrap_content로 주어진 경우 할당된다.)
MeasureSpec 사용
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
var w = MeasureSpec.getSize(widthMeasureSpec)
var h = MeasureSpec.getSize(heightMeasureSpec)
val widthMode = MeasureSpec.getMode(widthMeasureSpec)
val heightMode = MeasureSpec.getMode(heightMeasureSpec)
when {
(widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED) && (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED) -> {
w = (100 * resources.displayMetrics.density + 0.5).toInt()
h = (100 * resources.displayMetrics.density + 0.5).toInt()
}
widthMode == MeasureSpec.EXACTLY && (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED) -> {
h = w
}
(widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED) && heightMode == MeasureSpec.EXACTLY -> {
w = h
}
}
setMeasuredDimension(w, h)
}
getSize와 getMode로 MeasureSpec으로 부터 값과 모드를 얻을 수 있다.
int newWidthSpec = MeasureSpec.makeMeasureSpec( widthPixels, widthMode );
makeMeasureSpec으로 새로운 MeasureSpec을 만들 수 있다.
Git (예제코드)
github.com/KangTaeJong98/Example/tree/main/Android/CustomView
'Android (안드로이드) > View' 카테고리의 다른 글
Android in A..Z - View (CustomView-Extend) (0) | 2021.04.30 |
---|---|
Android in A..Z - View (CustomViewGroup) (0) | 2021.04.30 |
Android in A..Z - View (CustomView) (0) | 2021.04.29 |
Android in A..Z - View (AttributeSet) (0) | 2021.04.29 |
Android in A..Z - View (개념) (0) | 2021.04.29 |
Comments