TextView監(jiān)聽ellipsize是否生效

開發(fā)過程中,為使TextView直觀的表現(xiàn)文字沒有展示完整,會啟用TextView的ellipsize屬性

android:ellipsize="end"

有時候,我們需要判斷它到底有沒有生效,這就會用到Layout中的getEllipsisCount方法了;
api中指出,該方法獲取的就是被省略的部分的文字?jǐn)?shù)量;

layout.getEllipsisCount(int line)

但是要注意的是,該方法只有在TextView繪制完成后,才能獲取正確的值,監(jiān)聽View繪制,這個太容易了,下面給出一個封裝好的TextView

EllipsisTextView


/**
 * Created by MrYan on 2018/9/11.
 * 監(jiān)聽是否觸發(fā) ellipsize 屬性的TextView
 */

@SuppressLint("AppCompatCustomView")
public class EllipsisTextView extends TextView {
    private static final String TAG = "EllipsizeTextView";

    private OnEllipsisListener onEllipsisListener;

    public EllipsisTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        //設(shè)置觀察者,爛大街的代碼
        //這里未把觀察者注銷,是因為我的TextView寬高是隨時變化的,如果是固定的最好根據(jù)需要注銷掉
        getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                analyzeProcess();
            }
        });
    }

    /**
     * 通過 layout 的 getEllipsisCount(int line) 方法,來獲取被省略的部分?jǐn)?shù)量
     * 為0時就是沒省略
     * 在利用自定義的監(jiān)聽器返回給待操作的對象;
     */
    private void analyzeProcess() {
        if (onEllipsisListener == null) return;
        Layout layout = getLayout();//拿到Layout
        int line = getLineCount();//獲取文字行數(shù)
        if (line > 0) {
            int ellipsisCount = layout.getEllipsisCount(line - 1);
            //ellipsisCount > 0 時,說明省略生效
            onEllipsisListener.onEllipsis(ellipsisCount > 0, ellipsisCount);
        }
    }

    public void setOnEllipsisListener(OnEllipsisListener onEllipsisListener) {
        this.onEllipsisListener = onEllipsisListener;
    }

    public EllipsisTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public EllipsisTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    /**
     * 自定義監(jiān)聽器
     * boolean 省略是否生效  ellipsisCount 省略部分字?jǐn)?shù)
     */
    public interface OnEllipsisListener {
        void onEllipsis(boolean isEllipsis, int ellipsisCount);
    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 想怎樣? 明天就要交資料,電腦一上午都在和我做對,越著急越是卡、死機輪番上陣!現(xiàn)在我筋疲力盡,無心工作了,不如靜靜...
    小核桃華揚閱讀 240評論 0 1

友情鏈接更多精彩內(nèi)容