본문 바로가기

Android + Kotlin

[Android + Kotlin] TextView에 <a> tag URL링크 적용하기

반응형

서버에서 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에 올려주신 외국형아~ 쌩유~^^

 

 

반응형