【问题标题】:Issue with handling click on Expandable textview处理单击可扩展文本视图的问题
【发布时间】:2014-12-07 15:33:05
【问题描述】:

我有一个可展开的文本视图,其中有一个“查看更多”选项。我可以指定要显示的 maxChars 而不是 maxLine。

我对这里的代码做了一些修改: Detect if TextVIew is ellipsized before layout is shown

我的要求是,如果 chars ==200 按原样显示文本。如果 maxChars > 200 则显示“查看更多”选项。一旦文本被展开(隐藏“查看更多”文本),如果用户在任何地方单击文本,它应该再次压缩并显示 200 个字符,并在其末尾显示“查看更多”。我试过了,但是在将点击侦听器设置为整个文本时遇到了问题。因为即使是“查看更多”跨区文本也会监听点击事件。

谁能帮帮我!

谢谢 斯内哈

【问题讨论】:

    标签: android spannablestring


    【解决方案1】:

    试试这个方法,希望能帮助你解决问题。

    textView = (TextView) findViewById(R.id.textView);
    textView.setText("demotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotext");
    TextViewResizable(textView,16,"See More");
    
          public void TextViewResizable(final TextView tv,final int maxCharacter, final String expandText) {
            if (tv.getTag() == null) {
                tv.setTag(tv.getText());
            }
            ViewTreeObserver vto = tv.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    
                @SuppressWarnings("deprecation")
                @Override
                public void onGlobalLayout() {
                    ViewTreeObserver obs = tv.getViewTreeObserver();
                    obs.removeGlobalOnLayoutListener(this);
                    if (tv.getText().length() < maxCharacter) {
                        String text = tv.getText().subSequence(0,tv.getText().length())+ " " + expandText;
                        tv.setText(text);
                        tv.setMovementMethod(LinkMovementMethod.getInstance());
                        tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, expandText), TextView.BufferType.SPANNABLE);
                    } else if (tv.getText().length() >= maxCharacter) {
                        String text = tv.getText().subSequence(0,maxCharacter)+ " " + expandText;
                        tv.setText(text);
                        tv.setMovementMethod(LinkMovementMethod.getInstance());
                        tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, expandText), TextView.BufferType.SPANNABLE);
                    }
                }
            });
    
    
    
        }
    
        private SpannableStringBuilder addClickablePartTextViewResizable(final Spanned strSpanned, final TextView tv, final String expandText) {
            String str = strSpanned.toString();
            SpannableStringBuilder ssb = new SpannableStringBuilder(strSpanned);
    
            if (str.contains(expandText)) {
                ssb.setSpan(new Spannable(Color.BLUE, true) {
                            @Override
                            public void onClick(View widget) {
                                tv.setLayoutParams(tv.getLayoutParams());
                                tv.setText(tv.getTag().toString(),TextView.BufferType.SPANNABLE);
                                tv.invalidate();
                            }
                        }, str.indexOf(expandText), str.indexOf(expandText)+ expandText.length(), 0);
    
            }
            return ssb;
    
        }
    
        class Spannable extends ClickableSpan {
    
            private int color = -1;
            private float fontSize = -1;
            private boolean isUnderline = true;
    
            /**
             * Constructor
             */
            public Spannable() {
            }
    
            /**
             * Constructor
             */
            public Spannable(int color) {
                this.color = color;
            }
    
            /**
             * Constructor
             */
            public Spannable(float fontSize) {
                this.fontSize = fontSize;
            }
    
            /**
             * Constructor
             */
            public Spannable(boolean isUnderline) {
                this.isUnderline = isUnderline;
            }
    
            /**
             * Constructor
             */
            public Spannable(int color, boolean isUnderline) {
                this.isUnderline = isUnderline;
                this.color = color;
            }
    
            /**
             * Constructor
             */
            public Spannable(int color, float fontSize) {
                this.color = color;
                this.fontSize = fontSize;
            }
    
            /**
             * Overrides methods
             */
            @Override
            public void updateDrawState(TextPaint ds) {
    
                if (color != -1) {
                    ds.setColor(color);
                }
                if (fontSize > 0) {
                    ds.setTextSize(fontSize);
                }
    
                ds.setUnderlineText(isUnderline);
    
            }
    
            @Override
            public void onClick(View widget) {
    
            }
        }
    

    【讨论】:

    • 我能够达到 200 个字符的限制。它还会展开以显示所有文本。我面临的问题是在任何地方单击文本并使用“查看更多”选项将其压缩以再次显示 200
    • 对上述问题有任何更新吗?我在处理跨文本和文本视图中的普通文本时遇到问题。我需要分别处理它们的 onclick
    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多