안드로이드 커스텀뷰(CustomView)에서
Paint로 텍스트 사이즈를 설정하고, Canvas로 텍스트(drawText())를 그렸을 때,
Canvas를 통해 그려진 텍스트의 너비와 높이를 파악해야 할 경우가 있다.
텍스트의 너비(가로)/높이(세로)를 고려하여 다른 뷰를 그려야하는 경우 등등.
방법은 대략 2종류가 있는 것 같다.
1. 텍스트 width만 체크하는 방법
2. 텍스트 widht, height 모두 체크하는 방법
1. 텍스트 너비(Width)만 체크하는 방법
1) Paint.measureText(text: String) : text의 너비를 Float로 반환
2) Paint.measureText(text: String, start: Int, end: Int) : text의 start인덱스부터 end인덱스까지의 너비를 Float로 반환
* 두번째 함수를 사용하면 텍스트의 일부 너비만 체크할 수 있다.
< measureText() 예제 코드 >
class CustomViewSize: View {
// 생성자
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// String 문자열 생성
val textString = "커스텀뷰에서 그린 텍스트"
// Paint 객체 생성
val paint = Paint()
// Canvas로 텍스트 그리기
canvas?.drawText(textString, 100f, 100f, paint)
// measureText() 메서드로 텍스트의 너비 체크
val textWidth = paint.measureText(textString)
// val textWidth = paint.measureText(textString, 0, textString.length)
// 로그에 찍어보기: 127.0
Log.d("myLog", "$textWidth")
}
}
measureText() 메서드에 대한 더 자세한 내용은 레퍼런스 참고
2. 텍스트 너비(Widht), 높이(Height) 모두 체크하는 방법
1) Rect 객체를 생성하고,
2) Paint.getTextBounds(text: String, start: Int, end: Int, bounds: Rect) 함수를 호출한 다음,
3) Rect객체.width(), Rect객체.height() 로 텍스트의 너비, 높이를 확인한다.
* getTextBounds()에 매개변수로 넣은 Rect객체에 텍스트의 너비, 높이가 할당된다.
* start, end 인덱스값을 통해 텍스트의 일부 너비, 높이만 체크할 수도 있다.
< getTextBounds() 예제 코드>
class CustomViewSize: View {
// 생성자
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
val textString = "커스텀뷰에서 그린 텍스트"
val paint = Paint()
canvas?.drawText(textString, 100f, 100f, paint)
// bounds객체(Rect) 생성
val bounds = Rect()
// getTextBounds()가 반환하는 값이 매개변수인 bounds에 할당된다.
paint.getTextBounds(textString, 0, textString.length, bounds)
// bounds에서 너비와 높이를 체크한다.
val textWidth = bounds.width()
val textHeight = bounds.height()
// 로그에 찍어본다: 127, 12
Log.d("myLog", "$textWidth, $textHeight")
}
}
getTextBounds() 함수에 대한 자세한 내용은 레퍼런스 참고
커스텀뷰 자체에 대한 기초는 아래 글 참고
[안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드] TabLayout 속성 설정 총정리: Text color/size, Tab height/backgroundColor, Indicator line width/color, Icon 등 (0) | 2021.09.02 |
---|---|
[안드로이드] TextView 임시 텍스트 설정 방법(tools:text): 개발시에만 노출, 런타임 비노출 (0) | 2021.09.01 |
[안드로이드] TextView 텍스트 문자열 일부 색상/크기/스타일 변경 설정 방법: Spannable (0) | 2021.08.30 |
[안드로이드] 앱 버전 업데이트 빌드 및 배포 방법(구글 플레이) (0) | 2021.08.29 |
[안드로이드] getDimension() vs. getDimensionPixelSize() 차이 (0) | 2021.08.27 |
댓글