Android開發筆記——TextView 多行時 ellipsize
1.先貼程式碼(以下程式碼是Recyclerview Adapter 片段)
class ItemViewHolder extends RecyclerView.ViewHolder { TextView tv_notes; ItemViewHolder(View itemView) { super(itemView); tv_notes = itemView.findViewById(R.id.tv_notes); if (notesMaxLength == 0) {//notesMaxLength 只是個全域性變數,用於儲存結果,避免多次執行,最佳化效能 tv_notes.setText(R.string.notes_max_length);//這個字串設定適當的長度,只要超過最大行,我這裡是"AAAA...AAA" tv_notes.post(new Runnable() { @Override public void run() { tv_notes.getLineCount(); if (tv_notes.getLineCount() > 3/*因為我的TextView lines屬性為3,所以這裡判斷如果超過3行*/) { notesMaxLength = tv_notes.getLayout().getLineEnd(2)/*第三行最後字元在總字串中的位置*/ - 3/*三個點兒的長度*/; if(SharedUtils.getNotesMaxLength(getActivity()) == 0){//這裡判斷是否第一次計算 notifyDataSetChanged();//你需要去重新整理RecyclerView,因為view.post會延遲載入 } SharedUtils.saveNotesMaxLength(getActivity(), notesMaxLength);//持久化儲存,資料庫或者檔案隨便 } } }); } } }
@Override public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) { if (viewHolder instanceof XXXHolder) { //Oter item UI } else if (viewHolder instanceof ItemViewHolder) { if (notesMaxLength > 0 && _data.get(position).getNote() != null && _data.get(position).getNote().length() > notesMaxLength) { ((ItemViewHolder) viewHolder).tv_notes.setText(_data.get(position).getNote() .substring(0, notesMaxLength)); } else { ((ItemViewHolder) viewHolder).tv_notes.setText(_data.get(position).getNote()); } } }
2.因為getLineCount()方法與getWidth()類似,setText()方法是執行緒中完成的,所以直接呼叫getLineCount()方法返回0, 在view.post()中執行就是返回真正結果,因為返回結果之前UI已經重新整理,所以在得到結果後再次重新整理UI.
這個方法不需要自定義TextView,也不需要用複雜難懂的演算法,簡單有效,稍微修改下程式碼,就可以滿足大多數需求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1817/viewspace-2806258/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android支援多行文字省略EllipsizeAndroid
- Android開發筆記——TextView文字設定不同顏色Android筆記TextView
- Android開發筆記Android筆記
- Android 開發學習筆記Android筆記
- Android開發筆記[16]-簡單使用wasmedge執行時Android筆記ASM
- Android開發筆記[10]-關於頁Android筆記
- Android開發筆記[17]-桌面小部件Android筆記
- Android文字過長時根據關鍵字省略內容EllipsizeAndroid
- Android開發筆記[18]-使用本地模組Android筆記
- Android開發筆記[13]-圖案密碼Android筆記密碼
- Android元件詳解—TextViewAndroid元件TextView
- android炫酷的textviewAndroidTextView
- Android 高亮關鍵字TextViewAndroidTextView
- Android:TextView maxWidth maxLines maxLength maxEmsAndroidTextView
- Android中TextView及其子類AndroidTextView
- Android開發隨記Android
- 張紹文android開發高手課讀書筆記1Android筆記
- 閱讀《阿里巴巴Android開發手冊1.0.1》筆記阿里Android筆記
- Android開發筆記[12]-使用AAR方式嵌入flutter頁面Android筆記Flutter
- Android TextView 富文字之 android.text.style.xxxSpanAndroidTextView
- 馬克筆記—Android 端開源的 Markdown 筆記應用筆記Android
- golang 開發筆記Golang筆記
- Laravel 開發筆記Laravel筆記
- uinapp 開發筆記UIAPP筆記
- fyne 開發筆記筆記
- FFmpeg開發筆記(十六)Linux交叉編譯Android的OpenSSL庫筆記Linux編譯Android
- FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫筆記Linux編譯Android
- Android AlertDialog筆記Android筆記
- Android 開發藝術探索筆記之一 -- Android 的生命週期和啟動模式Android筆記模式
- 阿里巴巴Android開發手冊V1.0.0隨手筆記阿里Android筆記
- Android開發筆記——透明狀態列與透明虛擬按鍵Android筆記
- 筆記, 配置阿里雲 Cumulo(ClojureScript) 臨時開發環境筆記阿里開發環境
- 小程式開發筆記筆記
- ExtJS 6.2開發筆記JS筆記
- 【Python】GUI開發筆記PythonGUI筆記
- Java 開發筆記16Java筆記
- 元件包開發筆記元件筆記
- Android入門教程 | Button,TextView背景設定AndroidTextView