TextView 顯示「標題 + 時間」,標題粗體,時間正常。標題較短時,時間自動換到第二行。
DisplayMetrics 或 View.getWidth()。Paint.measureText() 測量標題寬度、時間寬度。titleWidth + timeWidth > availableWidth,在中間插入 \n。SpannableString 設置樣式。public static CharSequence buildTitleTime(String title, String time, TextView tv) {
Paint paint = tv.getPaint();
float availWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight();
if (availWidth <= 0) availWidth = Resources.getSystem().getDisplayMetrics().widthPixels * 0.9f;
float titleW = paint.measureText(title);
float timeW = paint.measureText(time);
String text = (titleW + timeW > availWidth) ? title + "\n" + time : title + " " + time;
SpannableString ss = new SpannableString(text);
ss.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 時間灰色
int timeStart = text.indexOf(time);
if (timeStart >= 0) {
ss.setSpan(new ForegroundColorSpan(Color.GRAY), timeStart, timeStart + time.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ss;
}
// 使用
tv.setText(buildTitleTime("標題", "2024-01-15 14:30", tv));
StaticLayout layout = new StaticLayout(
ss, paint, availWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false
);
// layout.getLineCount() > 1 即發生換行
onSizeChanged 或 ViewTreeObserver.OnGlobalLayoutListener 中調用,確保寬度已定。