반응형
서버에서 html 태그 형태로 string을 내려주면, 이를 TextView에 표현하는 기능을 구현하는 것이 이번 미션이었습니다.
그 중 <a> tag가 있었고, 클릭시 외부 웹브라우저로 연동이 되어야 했습니다.
처음엔 단순히 Linkify를 사용해서 구현을 하면되겠다 싶었는데, 아래와 같이 일반 텍스트에 <a> 테그가 적용되는 경우가 있어서 Spannable로 구현방법을 변경해야 했습니다.
<a href="http://www.naver.com">네이버</a>
일단, 구글링을 해봅니다.
stackoverflow에 좋은게 있네요.ㅎㅎ
낼름 가져다 사용합니다.^^
fun TextView.onUrlClicked(onClicked: ((String) -> Unit)? = null) {
text = SpannableStringBuilder.valueOf(text).apply {
getSpans(0, length, URLSpan::class.java).forEach {
setSpan(
object : ClickableSpan() {
override fun onClick(widget: View) {
onClicked?.invoke(it.url)
}
},
getSpanStart(it),
getSpanEnd(it),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
)
removeSpan(it)
}
}
movementMethod = LinkMovementMethod.getInstance()
}
호출은 아래와 같이 합니다.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
textView.text = Html.fromHtml(htmlString, Html.FROM_HTML_MODE_LEGACY)
} else {
textView.text = Html.fromHtml(htmlString)
}
textView.onUrlClicked { url ->
// TO-DO. URL 링크 실행
}
위와같이 구현하면 끝!!
내가 개발한 소스가 아니니 설명은 패스~!! 합니다.
stackoverflow에 올려주신 외국형아~ 쌩유~^^
반응형
'Android + Kotlin' 카테고리의 다른 글
[Android+kotlin] PagingDataAdapter 에서 삭제기능 구현하기 (0) | 2023.03.13 |
---|---|
[Android + Kotlin] Notification Trampolines 이슈 해결하기 (0) | 2023.02.24 |
[Android+Kotlin] 외부저장소 파일 목록 가져오기 (디렉토리 위치, 최신순) (0) | 2023.02.09 |
[Android+Kotlin] 외부저장소에 파일 저장하기(Android Q 이상) (0) | 2023.02.09 |
[Android+Kotlin] Logcat 로그 전체 보기 팁 (잘림현상 극복~) (0) | 2023.01.16 |