You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何在TextView中实现时间格式里h字符的上标效果

解决方案

仅用单个TextView即可实现需求,不需要拆分多个控件,推荐两种常用的简便方案:

方案1:使用原生SpannableString实现(推荐,性能更优、样式可控性高)

安卓原生Span体系支持直接对字符串内的单个字符设置特殊样式,实现步骤如下:

  • 构造完整的时间字符串,示例为5h45'12"
  • 定位h字符在字符串中的索引位置
  • 给h字符应用上标样式,还可按需调整字体大小、垂直偏移量

Java示例代码:

// 构造时间字符串
String timeStr = "5h45'12\"";
SpannableString spannable = new SpannableString(timeStr);
// 定位h的位置
int hIndex = timeStr.indexOf('h');
// 设置上标样式
spannable.setSpan(new SuperscriptSpan(), hIndex, hIndex + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 可选:调整上标字体大小为默认的70%,视觉效果更协调
spannable.setSpan(new RelativeSizeSpan(0.7f), hIndex, hIndex + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 给TextView设置内容
textView.setText(spannable);

Kotlin示例代码:

val timeStr = "5h45'12\""
val spannable = SpannableString(timeStr)
val hIndex = timeStr.indexOf('h')
spannable.setSpan(SuperscriptSpan(), hIndex, hIndex + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannable.setSpan(RelativeSizeSpan(0.7f), hIndex, hIndex + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
textView.text = spannable

方案2:使用HTML格式渲染(代码更简洁)

如果不需要复杂的样式定制,直接用HTML的<sup>标签包裹h字符,再给TextView设置渲染后的HTML内容即可:

// 构造带上标标签的HTML内容
String htmlTime = "5<sup>h</sup>45'12\"";
// 兼容全版本的HTML渲染写法
textView.setText(HtmlCompat.fromHtml(htmlTime, HtmlCompat.FROM_HTML_MODE_LEGACY));

注意:Android 7.0及以上系统原生的Html.fromHtml方法需要额外传入渲染模式参数,直接用androidx.core.text.HtmlCompat的API可避免版本兼容问题。


内容的提问来源于stack exchange,提问作者Artyum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:36:08