這裏碰到了行數大於3行的時候有一個顯示全部的文案提示,看了下網上內容
大多數的做法是textview.getLayout()
,然後這一方法又需要TextView繪製完成才能調用,不然返回的null。
所以基本在回調裏處理。
content.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int count = content.getLineCount() - 1;
Layout layout = content.getLayout();
int c = layout.getEllipsisCount(count);
helper.setGone(R.id.show_all, c > 0);
}
});
這是在RecyclerView的Adapter寫的,基本是沒問題的,但是會概率性出現layout
爲null,這時候也沒有辦法做出處理,ANR誰知道呢。在回調裏判斷layout
是否爲空,會出現另外的問題:
- 爲空後的邏輯怎麼處理?
- 列表滑動複用的時候UI錯亂
這真的難受,我本需要判斷是否有省略,現在判斷不了,那我的"顯示全部"應該顯示還是不顯示。
無語。。。
接着看到了下面的內容
//需要繼承TextView
private int getAvailableWidth(){
return getWidth() - getPaddingLeft() - getPaddingRight();
}
private boolean isOverFlowed(){
Paint paint = getPaint();
float width = paint.measureText(getText().toString());//這是字符串一行的寬度
//可以在這裏操作,分行就除以幾我這裏是三行
float singleWidth = width / 3;
return singleWidth > getAvailableWidth();
}
當一行的文字的寬度超過了可用的寬度,那麼就認爲3行的高度不夠使用,就需要“顯示全部”。至此over
ps:得到寬度需要textview繪製完成,就是
view.post()
runnable裏操作。