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

+ Recent posts