2015-08-26 116 views
3

ListView內有TextView
我設置maxLine TextView通過編碼像波紋管。
textView.getLineCount()未按預期工作

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的影響下和滾動

+0

你試過在textView.setText()之前調用textView.setMaxLines(4)嗎? –

+0

如果我的textview有多於4行,那麼只有我想設置textView的maxLine。 –

+0

如果您可以事先使用setMaxLines()來限制行數,那麼爲什麼還需要計算行數呢? –

回答

0

嘗試獲得在TextView的文本的可見部分,並檢查是否等於原來的輸入,看看這個話題Get current visible text in 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); 
} 
+0

嗯好吧我現在正在處理這個問題,這樣做後會馬上回來。 –

+0

NullPointerException at int start = view.textView.getLayout()。getLineStart(0); –

+1

本主題具有解決異常的方法http://stackoverflow.com/questions/16558948/how-to-use-textview-getlayout-it-returns-null –

2

我在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

謝謝!有效! –

+0

謝謝!它也適用於我。 – Shailesh