1. 程式人生 > >Android中獲取TextView行數

Android中獲取TextView行數

專案中發現,如果直接通過TextView.getLineCount()方法獲取行數時,總是0,研究發現,setText()後立即呼叫getLineCount(),

這時TextView還未完成measure,要想正確的獲取TextView的行數有兩種方法

1.用ViewTreeObserver監聽View初始化的各種狀態

使用ViewTreeObserver的OnPreDrawListener在TextView完成測量和定位即將繪製時呼叫getLineCount()即可得到TextView的真實行數,程式碼如下:

tv_test.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {     @Override     public boolean onPreDraw() {         //這個回撥會呼叫多次,獲取完行數記得登出監聽         tv_test.getViewTreeObserver().removeOnPreDrawListener(this);

        LogUtils.e("TextView 行數:" + tv_test.getLineCount());         return false;     } }); tv_test.setText("老人取件發現“鉅獎” 將計就計反忽悠騙子老人取件發現“鉅獎”");

注意紅框部分。

2.View.post(Runnable r)方法

程式碼如下:

tv_test.post(new Runnable() {     @Override     public void run() {         LogUtils.e("行數:"+tv_test.getLineCount());     } }); tv_test.setText("老人取件發現“鉅獎” 將計就計反忽悠騙子老人取件發現“鉅獎”");

這個Runnable會被新增到一個順序執行的UI事件佇列,等執行到裡面的程式碼時,View已經完成了measure和layout等一系列

初始化工作,所以可以正確獲取到View的高度等資訊