TextView의 더 보기
TextView안의 text가 늘어날 경우 말줄임표처럼 표시하고,
내용을 펼쳤다가 접었다가 할 수 있는 기능을 구현해야합니다
나중에 또 쓸 일이 있을 것 같아서 정리해두고자 합니다
우선, TextView 2개를 사용해 하나는 text를 표시하고, 하나는 더보기
를 표시하는 용도로 사용했습니다
text 표시 View : tvMsg
더보기 표시 View : tvMore
tvMsg의 MaxLine은 2로 정하고, ellipsized는 end로 지정했습니다.
그리고, tvMore은 tvMsg의 text가 MaxLine을 넘어설 경우에만 보이게 했습니다.
tvMsg가 ellipsized 상태인지 확인
MaxLine을 넘어섰을 경우를 확인하기 위해선, ellipsized의 상태인지 확인하면 됩니다
(ellipsized를 지정한 경우)
if (tvMsg.layout.getEllipsisCount(tvMsg.lineCount - 1) > 0) {
tvMore.visibility = View.VISIBLE
} else {
tvMore.visibility = View.GONE
}
ellipsized의 상태일 때 , tvMore을 클릭하면 text가 전부 표시
private fun readMore(view: TextView, text: String, maxLine: Int) {
var expandText = text
if (view.tag != null && view.tag.equals(text)) {
return
}
view.tag = text
view.text = text
var h = Handler()
h.postDelayed({
if (view.lineCount >= maxLine) {
var lineEndIndex = view.layout.getLineVisibleEnd(maxLine - 1)
var split = text.split("\n")
var splitLength = 0
var lessText = ""
for (item in split) {
splitLength += item.length + 1
if (splitLength >= lineEndIndex) {
if (item.length >= expandText.length) {
lessText += item.substring(0, item.length - (expandText.length)) + expandText
} else {
lessText += item + expandText
}
break
}
lessText += item
}
view.text = lessText
view.movementMethod = LinkMovementMethod.getInstance()
tvMore.visibility = View.GONE
}
}, 10)
}
하단의 블로그에서 참고를 많이 했습니다
현재 코틀린을 사용하기 때문에 코틀린으로 변경해서 작업을 했습니다
하단의 블로그에는 spannable적용 부분도 있기 때문에 참고해보시길 바랍니다
출처 블로그
궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊
'📱 Android' 카테고리의 다른 글
[Android / Kotlin] TextView 취소선 표시 및 해제 (0) | 2019.10.01 |
---|---|
[Android / kotlin] getLineCount = 0으로 찍힐 때 (0) | 2019.09.26 |
[ConstraintLayout] ConstraintLayout에 대해 알아보자 (0) | 2019.08.11 |
[Android] px,dp,sp의 차이 (0) | 2019.08.11 |
[LineChart] MPAndroidChart LineChart 속성 (0) | 2019.07.31 |