Android MaterialTextView如何让长文本省略号显示在首行而非末行
Android MaterialTextView 金币数值固定第二行后缀实现方案
问题本质
单TextView设置maxLines=2+end省略模式时,系统会自动根据可用宽度按顺序排版所有字符,即便手动加了换行符,过长的数字内容会先填满第一行剩余空间,再把后续数字挤到第二行,最终把Coins文本挤到第二行末尾触发省略,无法实现「第一行长数字省略、第二行固定显示Coins」的效果。
最优实现方案
直接拆分两个独立的MaterialTextView,用垂直方向布局容器包裹,从排版逻辑上彻底隔离动态数值和固定文本,没有适配兼容问题。
布局配置代码
<!-- 外层容器宽度和你原有TextView保持一致,0dp对应约束布局下的权重宽度配置 --> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical"> <!-- 第一行:动态金币数值,配置单行末尾省略 --> <com.google.android.material.textview.MaterialTextView android:id="@+id/tv_coin_value" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="1" android:ellipsize="end" android:text="734,324"/> <!-- 第二行:固定Coins文本,永远不会被挤压移位 --> <com.google.android.material.textview.MaterialTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Coins"/> </LinearLayout>
效果验证
- 短数值场景:第一行完整显示全量金币数字,第二行正常展示
Coins,和原有短值展示效果完全一致 - 长数值场景:数字长度超出第一行可用宽度时,自动在第一行末尾追加省略号,第二行
Coins固定位置展示,完全匹配预期效果
不推荐的单控件实现思路
如果强行用单个TextView实现,需要在代码中通过StaticLayout提前测量当前字体大小、屏幕宽度下第一行可容纳的最大数字字符数,手动截断超长数字、拼接省略号后再拼接换行符和Coins文本。该方案需要额外适配系统字体缩放、不同分辨率、字体样式变更等场景,维护成本极高,没有特殊需求不建议使用。
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

