android 决TextView中MaxLines与ellipsize=end冲突问题
今天,講講如何在多行文本后顯示省略號。
TextView控件有一個屬性是ellipsize,指的是當文字內容長度超過TextView大小時顯示問題,一般情況下我們都是用省略號表示,常用的情況有以下四種:
1,Android:ellipsize = "end" ?省略號在結尾
3,android:ellipsize = "start"? 省略號在開頭
3,android:ellipsize = "middle" ? ??省略號在中間
4,android:ellipsize = "marquee" ?跑馬燈
但是我們遇到的問題是,這幾個屬性一般只有在設置了android:singleline = "true"的時候才有效,此時只能顯示一行文字,但是當我們的TextView要顯示多行文字,比如我們設置了android:maxLines="3"時,我們肯定不能設置android:singleline = "true",此時的android:ellipsize=“end”就失去效果了。MaxLines與ellipsize=end沖突問題糾結我很久,在網上打了不少資料,加上自己工作中的實際情況,寫了個工具類,測試了好幾款手機都沒有問題,把主要代碼貼出來,請大家多指教!
? ????/** ?????*?參數:maxLines?要限制的最大行數 ? ? ?* 參數:content ?指TextView中要顯示的內容 ?????*/ ????public?void?setMaxEcplise(final?TextView?mTextView,?final?int?maxLines,?final?String?content)?{????????ViewTreeObserver?observer?=?mTextView.getViewTreeObserver(); ????????observer.addOnGlobalLayoutListener(new?OnGlobalLayoutListener()?{ ????????????@Override ????????????public?void?onGlobalLayout()?{ ????????????????mTextView.setText(content); ????????????????if?(mTextView.getLineCount()?>?maxLines)?{ ????????????????????int?lineEndIndex?=?mTextView.getLayout().getLineEnd(maxLines?-?1); ? ? ? ? ? ? ? ? ? ? //下面這句代碼中:我在項目中用數字3發現效果不好,改成1了
????????????????????String?text?=?content.subSequence(0,?lineEndIndex?-?3)?+?"..."; ????????????????????mTextView.setText(text); ????????????????} ????????????????else?{ ????????????????????removeGlobalOnLayoutListener(mTextView.getViewTreeObserver(),?this); ????????????????} ????????????} ????????}); ????}
????@SuppressWarnings("deprecation") ????@SuppressLint("NewApi") ????private?void?removeGlobalOnLayoutListener(ViewTreeObserver?obs,?OnGlobalLayoutListener?listener)?{ ????????if?(obs?==?null) ????????????return; ????????if?(Build.VERSION.SDK_INT?<?16)?{ ????????????obs.removeGlobalOnLayoutListener(listener); ????????} ????????else?{ ????????????obs.removeOnGlobalLayoutListener(listener); ????????} ????}
以上只是相關的方法代碼,傳入相應的參數就可以了
這個其實很簡單,只是判斷文檔數是否大于3行,如果大于,則只顯示3行的文本,然后加入省略號。
android 決TextView中MaxLines與ellipsize=end沖突問題就講完了。
就這么簡單。
總結
以上是生活随笔為你收集整理的android 决TextView中MaxLines与ellipsize=end冲突问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 快速新建字符资源
- 下一篇: android synchronized