最后一行带有时间的Android TextView

问题描述 投票:0回答:1

我需要一个自定义文本视图来在最后一行显示时间。时间应与所有消息的右侧对齐。如果最后一行没有空格,则时间移到下面。是否有库可以实现此功能?或者自己怎么做?

android android-custom-view
1个回答
0
投票

假设这是您的 xml 中的 TextView :

<TextView
        android:id="@+id/textMain"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_margin="16dp"/>

您可以通过进行一些计算和检查宽度来实现这一点,这是一个示例函数,您可以将其传递给正文和时间戳

private fun updateText(mainText: String, timestamp: String) {
    val fullText = "$mainText $timestamp"
    textViewMain.text = fullText

    textViewMain.post {
        val layout = textViewMain.layout ?: return@post
        val textWidth = layout.getLineWidth(layout.lineCount - 1)
        val timestampWidth = textViewMain.paint.measureText(timestamp)

        if (textWidth + timestampWidth > textViewMain.width) {
            // Not enough space to fit on one line, put timestamp on a new line
            val newText = "$mainText\n$timestamp"
            val spannable = SpannableString(newText)
            spannable.setSpan(RelativeSizeSpan(0.9f), newText.length - timestamp.length, newText.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            textViewMain.text = spannable
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.