SMALL
안녕하세요. YTS 입니다.
오늘은 TextView의 더보기 기능에 대해 적어보려합니다.
더보기 기능은 페이스북, 인스타 등 기본적으로 SNS 에서 등장하는 기능인데요.
생각보다 마땅한 라이브러리가 없어 실제로 구현해봤습니다.
public static void setReadMore(final TextView view, final String text, final int maxLine) {
final Context context = view.getContext();
final String expanedText = " ... 더보기";
if (view.getTag() != null && view.getTag().equals(text)) { //Tag로 전값 의 text를 비교하여똑같으면 실행하지 않음.
return;
}
view.setTag(text); //Tag에 text 저장
view.setText(text); // setText를 미리 하셔야 getLineCount()를 호출가능
view.post(new Runnable() { //getLineCount()는 UI 백그라운드에서만 가져올수 있음
@Override
public void run() {
if (view.getLineCount() >= maxLine) { //Line Count가 설정한 MaxLine의 값보다 크다면 처리시작
int lineEndIndex = view.getLayout().getLineVisibleEnd(maxLine - 1); //Max Line 까지의 text length
String[] split = text.split("\n"); //text를 자름
int splitLength = 0;
String lessText = "";
for (String item : split) {
splitLength += item.length() + 1;
if (splitLength >= lineEndIndex) { //마지막 줄일때!
if (item.length() >= expanedText.length()) {
lessText += item.substring(0, item.length() - (expanedText.length())) + expanedText;
} else {
lessText += item + expanedText;
}
break; //종료
}
lessText += item + "\n";
}
SpannableString spannableString = new SpannableString(lessText);
spannableString.setSpan(new ClickableSpan() {//클릭이벤트
@Override
public void onClick(View v) {
view.setText(text);
}
@Override
public void updateDrawState(TextPaint ds) { //컬러 처리
ds.setColor(ContextCompat.getColor(context, R.color.gray_dark));
}
}, spannableString.length() - expanedText.length(), spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view.setText(spannableString);
view.setMovementMethod(LinkMovementMethod.getInstance());
}
}
});
}
참고로 String을 subString으로 자르면 개행문자("\n")이 다 없어지는 현상이 발생하더라구요!
그래서 String split를 써써 배열로 나눈뒤 \n을 다시 붙히는 형태로 처리하였습니다!
더 나은 로직이나 잘못된 부분이 있으면 댓글로 남겨주세요!
감사합니다!
LIST
'IT > 안드로이드 관련' 카테고리의 다른 글
나만의 ViewModel 이해하기 1 (0) | 2018.08.31 |
---|---|
[안드로이드] Parcelable 플러그인 추천 및 사용 방법 (2) | 2018.08.30 |
[안드로이드] 안드로이드 스튜디오 업데이트 확인 (0) | 2018.08.28 |
[안드로이드] 이미지가져오기 ACTION_GET_CONTENT 에서 putExtra 사용방법 (0) | 2018.08.28 |
[안드로이드] 레이아웃 모서리 둥글게 하기 (0) | 2018.08.27 |