textView.getLineCount()无法按预期工作

3

ListView中有一个TextView
我通过编程设置了TextView的最大行数,代码如下。

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);
        }
       }
    });

问题: textView.setMaxLine() 第一次不起作用。
ListView 向下滚动和向上滚动后影响了 textView。


你尝试过在调用textView.setText()之前调用textView.setMaxLines(4)吗? - Frank D.
如果我的TextView有超过4行,那么我才想要设置TextView的最大行数。 - Chirag Savsani
如果您可以使用setMaxLines()事先限制行数,为什么还需要计算行数呢? - Frank D.
因为有一个功能:阅读更多。如果我的文本视图超过4行,则“阅读更多”可见,否则“阅读更多”不可见。 - Chirag Savsani
2个回答

4

我有一个关于 RecyclerView 的例子,这个例子运行得很好。

 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;
                }
            });

0
尝试获取TextView中可见部分的文本,并检查是否与原始输入相等,请查看此主题{{link1:获取TextView中当前可见文本}}。我还没有尝试过这段代码,但值得一试。你会得到类似这样的东西:
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);
}

嗯,好的,我正在处理这个问题,做完后就会回来。 - Chirag Savsani
空指针异常:int start = view.textView.getLayout().getLineStart(0); - Chirag Savsani
1
这个主题提供了关于异常 https://dev59.com/ZWQn5IYBdhLWcg3wzZxU 的解决方案。 - Frank D.
仍然遇到了NullPointerException。感谢帮助。 - Chirag Savsani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接