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

Android TextView 單行省略號顯示:ellipsize + maxLines + scrollHorizontally 組合拳

     編輯:程式設計綜合問答

需求

TextView 單行顯示,內容過長時末尾顯示省略號 ...,不換行、不滾動。

最小有效屬性組合

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"  <!-- 或 match_parent 配合 weight -->
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:scrollHorizontally="true"
    android:singleLine="true" <!-- API 3 棄用但兼容性好 --> />

屬性作用解析

屬性作用必要性
maxLines="1"限制最大行數核心
ellipsize="end"超出部分末尾省略號核心
scrollHorizontally="true"啟用單行水平佈局測量關鍵(無此屬性 ellipsize 常失效)
singleLine="true"綜合設置:不換行、水平滾動、ellipsize 支持替代上述三者(棄用但有效)

常見失效原因

  1. 缺少 scrollHorizontally="true":TextView 默認多行測量,ellipsize 不生效。
  2. 父佈局限制寬度:layout_width="wrap_content" 在 LinearLayout 中若無 layout_weight,TextView 會撐開父容器而非省略。解決:layout_width="0dp" + layout_weight="1" 或固定 layout_width="200dp"。
  3. 設置了 gravity="center":文字居中會導致兩端省略,改用 ellipsize="middle" 或去掉 gravity。
  4. 文本包含換行符 \n:單行屬性不處理換行符,需預先 replace("\n", " ")。

代碼動態設置

TextView tv = findViewById(R.id.textView);
tv.setMaxLines(1);
tv.setEllipsize(TextUtils.TruncateAt.END);
tv.setHorizontallyScrolling(true); // 對應 scrollHorizontally
tv.setSingleLine(true); // 綜合設置

避坑指南

  • ellipsize 需配合 maxLines 或 singleLine 才生效。
  • XML android:ellipsize="end|marquee" 可跑馬燈,但需 setSelected(true) 觸發。
  • Rich Text (Spannable) 同樣支持 ellipsize,但 ImageSpan 可能導致測量異常。

TextView 單行省略號「三件套」:maxLines=1 + ellipsize=end + scrollHorizontally=true,缺一不可,父容器寬度受限是前提。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved