首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TextView 多行文本省略號顯示設置詳解

     編輯:程式設計綜合問答

問題現象

設置 android:maxLines="2" 和 android:ellipsize="middle",期望超出兩行時在中間顯示「...」,但實際顯示為兩行完整文本,**無省略號**,且文本被截斷。

原因分析

android:ellipsize="middle" **僅對單行文本生效**。多行文本下,Android 框架**不支援中間省略**,僅支援 end (結尾省略) 和 marquee (跑馬燈)。

解決方案:使用 end 省略



效果:顯示前兩行內容,超出部分在**第二行末尾**顯示「...」。

進階:實現真正的「中間省略」或「展開/收起」

若業務強制要求中間省略或「查看更多」交互,需自定義實現:

方案一:自定義 View 計算佈局 (複雜)

  • 重寫 onMeasure、onDraw,使用 StaticLayout 測量文本行數。
  • 超過最大行時,二分查找截斷位置插入「...」,重新測量直到適合。
  • 參考開源庫:ExpandableTextView、ReadMoreTextView。

方案二:兩個 TextView 組合 (簡單實用)



    
    
    
    

代碼邏輯:


TextView tvContent = findViewById(R.id.tv_content);
TextView tvMore = findViewById(R.id.tv_more);

tvContent.post(() -> {
    Layout layout = tvContent.getLayout();
    if (layout != null && layout.getLineCount() > 2) {
        tvMore.setVisibility(View.VISIBLE);
        tvMore.setOnClickListener(v -> {
            if (tvContent.getMaxLines() == 2) {
                tvContent.setMaxLines(Integer.MAX_VALUE);
                tvMore.setText("收起");
            } else {
                tvContent.setMaxLines(2);
                tvMore.setText("展開");
            }
        });
    }
});

屬性對照表

ellipsize 值單行多行 (maxLines > 1)說明
start✅❌ 無效果開頭省略
middle✅❌ 無效果中間省略
end✅✅ **支援**結尾省略 (多行推薦)
marquee✅❌ 需單行+focus跑馬燈滾動
none✅✅不省略,直接截斷

總結

  • 多行 TextView **只能用 ellipsize="end"** 顯示省略號。
  • 若需中間省略或展開/收起,**請用開源庫或自定義組合方案**,不要嘗試修改框架行為。
  • 設置 android:maxLines 時務必搭配 ellipsize,否則超出部分直接截斷無提示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved