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 支持 | 替代上述三者(棄用但有效) |
scrollHorizontally="true":TextView 默認多行測量,ellipsize 不生效。layout_width="wrap_content" 在 LinearLayout 中若無 layout_weight,TextView 會撐開父容器而非省略。解決:layout_width="0dp" + layout_weight="1" 或固定 layout_width="200dp"。gravity="center":文字居中會導致兩端省略,改用 ellipsize="middle" 或去掉 gravity。\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 才生效。android:ellipsize="end|marquee" 可跑馬燈,但需 setSelected(true) 觸發。TextView 單行省略號「三件套」:maxLines=1 + ellipsize=end + scrollHorizontally=true,缺一不可,父容器寬度受限是前提。