TextView 判斷省略號

這裏碰到了行數大於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裏操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章