3

There is a TextView inside ListView.
I set maxLine of TextView through codding like bellow.

view.textView.setText("....... Long String.........");
    view.textView.post(new Runnable() {
       @Override
       public void run() {

        if(view.textView.getLineCount > 4) {
           view.tv_read_more.setVisibility(View.VISIBLE);
           view.textView.setMaxLines(4);
        }
       }
    });

Problem : textView.setMaxLine() not working first time.
textView affected after ListView scroll down and scroll up

Chirag Savsani
  • 6,020
  • 4
  • 38
  • 74

2 Answers2

4

I have an example in RecyclerView,this is work well.

 mDes.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    mDes.getViewTreeObserver().removeOnPreDrawListener(this);
                    int lineCount = mDes.getLineCount();
                    Log.e("TreeObserver", "onBind: " + lineCount1);
                    if (lineCount1 < 4 || isExpand) {
                        mArrowContainer.setVisibility(View.GONE);
                    } else {
                        mArrowContainer.setVisibility(View.VISIBLE);
                    }
                    return true;
                }
            });
joe
  • 619
  • 6
  • 10
0

Try getting the visible part of your text in the TextView and check if that is equal to the original input, check out this topic Get current visible text in textview. I haven't tried the code, but it's worth a shot. You'll get something like this:

String input = "....... Long String.........";
view.textView.setMaxLines(4); //this limits the number of lines to 4
view.textView.setText(input);

//now check if the text in your textview is completely visible.
//if not, show ReadMore
int start = view.textView.getLayout().getLineStart(0); //start position
int end = view.textView.getLayout().getLineEnd(textView.getLineCount() - 1); //last visible position

String displayedText = view.textView.getText().toString().substring(start, end); //the piece of text that is in fact visible

if(displayedText.equals(input ){
   //text fits entirely in textview
   view.tv_read_more.setVisibility(View.GONE);
}else{
   //show "read more"
   view.tv_read_more.setVisibility(View.VISIBLE);
}
Community
  • 1
  • 1
Frank D.
  • 1,306
  • 1
  • 13
  • 23