2014-10-13 2 views
0

У меня есть расширяемый текстовый вид, который имеет опцию «просмотреть больше». Для чего я могу указать maxChars для отображения вместо maxLine.Проблема с обработкой click on Expandable textview

Я сделал некоторые изменения в код присутствующих здесь: Detect if TextVIew is ellipsized before layout is shown

Мое требование, что если символы == 200 показать текст, как это .. если maxChars> 200, то показать «увидеть больше» вариант. После того, как текст будет расширен (скрыть «просмотреть больше» текста), если пользователь нажимает на текст в любом месте, он должен снова сжать, отображая 200 символов с «просмотреть больше» в конце его. Я попробовал, но столкнулся с проблемой при настройке прослушивания кликов на весь текст. Поскольку даже «увидеть больше» натянутый текст прослушивает событие click.

Может кто-нибудь помочь мне с этим!

Благодаря Sneha

ответ

0

Попробуйте этот путь, надеюсь, это поможет вам решить вашу проблему.

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) { 

     } 
    } 
+0

Я могу достичь предела 200 символов. Он также расширяется, чтобы отобразить весь текст. Проблема, с которой я столкнулся, - щелкнуть по тексту в любом месте и сжать его, чтобы снова показать 200 с опцией «просмотреть больше» – Neha

+0

Любое обновление по вышеуказанному вопросу? Я столкнулся с проблемой обработки onclick на растянутый текст и обычный текст в текстовом виде. Мне нужно обрабатывать onclick на обоих из них отдельно – Neha

Смежные вопросы