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
- 使TextView元件的android:ellipsize="marquee"屬性生效TextView元件Android
- Android開發筆記Android筆記
- Android筆記-2-TextView的屬性詳解Android筆記TextView
- Android個人開發筆記Android筆記
- Android 開發學習筆記Android筆記
- Android開發筆記[16]-簡單使用wasmedge執行時Android筆記ASM
- Android應用開發筆記(一)Android筆記
- Android開發筆記[18]-使用本地模組Android筆記
- Android開發筆記[10]-關於頁Android筆記
- Android開發筆記[17]-桌面小部件Android筆記
- android開發學習筆記系列(1)-android起航Android筆記
- Android文字過長時根據關鍵字省略內容EllipsizeAndroid
- Android開發筆記[13]-圖案密碼Android筆記密碼
- Android開發之TextView文字水平滾動效果實現AndroidTextView
- Android開發筆記(一百一十九)工具欄ToolBarAndroid筆記
- android開發筆記之ADB Shell CommandsAndroid筆記
- android遊戲開發自學筆記3-2Android遊戲開發筆記
- fyne 開發筆記筆記
- Laravel 開發筆記Laravel筆記
- golang 開發筆記Golang筆記
- 【筆記】敏捷開發筆記敏捷
- 《Android藝術開發探索》學習筆記之IPCAndroid筆記
- android開發筆記之內建圖片到相簿Android筆記
- Android開發隨記Android
- android炫酷的textviewAndroidTextView
- Android元件詳解—TextViewAndroid元件TextView
- Android:TextView控制元件AndroidTextView控制元件
- Android ImageView和TextView居中AndroidTextView
- 元件包開發筆記元件筆記
- 小程式開發筆記筆記
- EBS開發筆記-1筆記
- EBS開發筆記-2筆記
- IOS 開發筆記2iOS筆記
- Java 開發筆記16Java筆記
- 張紹文android開發高手課讀書筆記1Android筆記
- Android開發筆記(一百二十四)自定義相簿Android筆記