如何在Android布局XML中为字符串资源末尾追加字符?
在Android布局XML中实现字符串资源的两种显示形式(带冒号/不带冒号)
嘿,这个需求完全可以在XML里搞定,不用写一行Java/Kotlin代码,给你几个实用的方案:
方案一:定义关联的字符串资源(推荐)
这种方法兼容性拉满,所有Android版本都支持,而且维护起来特别方便——只要修改基础字符串,带冒号的版本会自动同步。
首先在你的strings.xml里定义两个字符串:
<!-- 基础版本,用于不需要冒号的场景 --> <string name="trailer_duration">Duration</string> <!-- 带冒号的版本,直接引用基础字符串并拼接冒号 --> <string name="trailer_duration_with_colon">@string/trailer_duration:</string>
然后在布局里按需使用:
<!-- 不带冒号的场景,直接用基础字符串 --> <TextView android:id="@+id/subtitle_title" style="@style/TrailerPlayerTrailerSubtitleTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:paddingRight="5dp" android:text="@string/trailer_duration" /> <!-- 需要冒号的场景,用带后缀的字符串 --> <TextView android:id="@+id/duration_label" style="@style/TrailerPlayerTrailerSubtitleTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:paddingRight="5dp" android:text="@string/trailer_duration_with_colon" />
方案二:直接在布局中拼接(快速临时方案)
如果只是少数几个地方需要加冒号,不想多定义字符串资源,也可以直接在布局的android:text里拼接:
<TextView android:id="@+id/subtitle_title" style="@style/TrailerPlayerTrailerSubtitleTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:paddingRight="5dp" android:text="@string/trailer_duration:" />
不过要注意:如果以后需要把冒号改成其他符号(比如:全角冒号),你得挨个修改所有用到的布局,不如方案一灵活。
方案三:用字符串格式化(仅API 26+)
如果你只需要支持Android 8.0(API 26)及以上版本,可以用字符串格式化+textArg属性:
先定义格式化字符串:
<string name="trailer_duration_formatted">%1$s%2$s</string>
然后在布局里传递参数:
<!-- 不带冒号 --> <TextView ... android:text="@string/trailer_duration_formatted" android:textArg0="@string/trailer_duration" android:textArg1="" /> <!-- 带冒号 --> <TextView ... android:text="@string/trailer_duration_formatted" android:textArg0="@string/trailer_duration" android:textArg1=":" />
这个方法不用多定义字符串,但兼容性有限,适合只做高版本适配的项目。
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

