1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | public static void makeTextViewResizable(final TextView tv, final int maxLine, final String expandText, final boolean viewMore) { if (tv.getTag() == null) { tv.setTag(tv.getText()); } ViewTreeObserver vto = tv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @SuppressWarnings("deprecation") @Override public void onGlobalLayout() { String text; int lineEndIndex; ViewTreeObserver obs = tv.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); if (maxLine == 0) { lineEndIndex = tv.getLayout().getLineEnd(0); //text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText; text = tv.getText().subSequence(0, lineEndIndex - (expandText.length())) + " " + expandText; } else if (maxLine > 0 && tv.getLineCount() >= maxLine) { lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1); //text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText; text = tv.getText().subSequence(0, lineEndIndex - (expandText.length())) + " " + expandText; } else { lineEndIndex = tv.getLayout().getLineEnd(tv.getLayout().getLineCount() - 1); //text = tv.getText().subSequence(0, lineEndIndex) + " " + expandText; text = tv.getText().subSequence(0, lineEndIndex - (expandText.length())) + " " + expandText; } tv.setText(text); tv.setMovementMethod(LinkMovementMethod.getInstance()); //tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, lineEndIndex, expandText,viewMore), TextView.BufferType.SPANNABLE); tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, lineEndIndex, expandText,viewMore)); } }); } private static SpannableStringBuilder addClickablePartTextViewResizable(final Spanned strSpanned, final TextView tv, final int maxLine, final String spanableText, final boolean viewMore) { String str = strSpanned.toString(); SpannableStringBuilder ssb = new SpannableStringBuilder(strSpanned); if (str.contains(spanableText)) { ssb.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { tv.setLayoutParams(tv.getLayoutParams()); //tv.setText(tv.getTag().toString(), TextView.BufferType.SPANNABLE); tv.setText(tv.getTag().toString()); tv.invalidate(); if (viewMore) { makeTextViewResizable(tv, -1, "...접기", false); } else { makeTextViewResizable(tv, 2, "...더보기", true); } } }, str.indexOf(spanableText), str.indexOf(spanableText) + spanableText.length(), 0); } return ssb; } AppInfo.makeTextViewResizable(holder.binding.userContent, 2, "...더보기", true); | cs |
'Android' 카테고리의 다른 글
안드로이드 나만의 기본 세팅!! (0) | 2020.04.06 |
---|---|
adb shell 명령어 (0) | 2020.03.29 |
이미지 슬라이더 (0) | 2020.03.29 |
스피너 값넣기 (0) | 2020.03.29 |
선택 다이얼로그 팝업 (0) | 2020.03.29 |