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
- 인텐트란?
- viewBinding
- 다이얼로그 크기조절
- 스크롤뷰 자식 뷰 높이 동적조절
- ScrollView with ConstraintLayout
- java
- 다이얼로그 프래그먼트
- Retrofit with MVVM
- 뷰바인딩
- 프로그래머스
- ScrollView Child View Height Programmatically
- 위치정보확인
- dialog resize
- location System
- lifecycleScope
- dialog fragment
- 안드로이드
- DataBinding
- Android
- 레트로핏 MVVM
- programmers
- recyclerview
- 레트로핏 코틀린
- Retrofit Kotlin
- 리사이클러뷰
- 쉐어드
- 레트로핏2
- dialogfragment singleton
- NestedScrollView
- 데이터바인딩
Archives
- Today
- Total
안드로이드 세계
[Android] ScrollView의 Child View Height 문제 본문
ScrollView를 이용하거나, NestedScrollView를 이용할 때 자식 뷰그룹으로 ConstraintLayout을 지정할 때가 있다.
ConstraintLayout의 자식 뷰의 높이를 0dp로 준후에 layout_constraintHeight_percent를 이용해서 크기를 지정할때에는 자식 뷰그룹인 ConstraintLayout의 높이는 0dp이기 때문에 뷰가 그려지지 않는다.
검색을 하게되면 ScrollView 또는 NestedScrollView에 android:fillViewport="true"로 설정 하라는 글들이 많다.
실제로 사용해보면 ScrollView 또는 NestedScrollView의 크기만큼 먼저 그려주기때문에 자식 뷰들은 그려진다.
하지만 percent를 이용해서 크기를 지정한 경우에는 사용할 수가없다.
잘 되는 것처럼 xml의 Design탭에서는 나오지만 스크롤 가능할만큼 높이를 주었음에도 불구하고 스크롤은 되지않는다.
해결방법은 더있을지는 모르지만 다음과 같은 방법으로 해결을 하였다.
실제 디바이스의 크기를 구한후, 뷰들의 높이를 일정크기만큼 지정해주었다.
코드는 다음과 같다.
fun Context.getDeviceHeight(): Int { // 디바이스의 높이를 구한다.
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
return if (Build.VERSION.SDK_INT >= 30) {
windowManager.currentWindowMetrics.bounds.height()
} else {
val display = windowManager.defaultDisplay
val size = Point()
display.getSize(size)
size.y
}
}
fun resizeViewHeight(deviceHeight: Int, view: View, height: Float) { // 뷰의 크기를 조절한다.
val layoutParams = view.layoutParams
layoutParams.height = (deviceHeight * height).toInt()
view.layoutParams = layoutParams
}
사용은 이렇게 한다.
//Fragment
private fun resizingViewHeight() {
val deviceHeight = requireContext().getDeviceHeight()
resizeViewHeight(deviceHeight, view, 0.05f)
}
//Activity
private fun resizingViewHeight() {
val deviceHeight = getDeviceHeight()
resizeViewHeight(deviceHeight, view, 0.05f)
}
잘못된 내용이나 더 조언해줄방법이있다면 댓글로알려주세요~!
'안드로이드(Android) > 코틀린(Kotlin)' 카테고리의 다른 글
[Android] WorkManager 특정시간알림 (0) | 2021.06.01 |
---|---|
[Android] WorkManager (0) | 2021.05.31 |
[Android] Retrofit2 사용법 (0) | 2021.05.01 |
[Android] SimpleDateFormat에 대하여 (0) | 2021.04.23 |
[Android] E/libc: Access denied finding property "ro.serialno" 에러시 대처법 (0) | 2021.04.20 |
Comments