Fix FooteredTextView measurements for overlong pill spans
Together with https://github.com/vector-im/element-android/pull/8260, fixes https://github.com/SchildiChat/SchildiChat-android/issues/28 Change-Id: I3c11d1ec89383330fedb4a958d70e89047915024
This commit is contained in:
parent
ea2a0e2193
commit
5ea7f03e25
|
@ -15,6 +15,7 @@ import im.vector.app.features.html.HtmlCodeSpan
|
||||||
import io.noties.markwon.core.spans.EmphasisSpan
|
import io.noties.markwon.core.spans.EmphasisSpan
|
||||||
import kotlin.math.ceil
|
import kotlin.math.ceil
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
import kotlin.math.min
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TextView that reserves space at the bottom for overlaying it with a footer, e.g. in a FrameLayout or RelativeLayout
|
* TextView that reserves space at the bottom for overlaying it with a footer, e.g. in a FrameLayout or RelativeLayout
|
||||||
|
@ -73,7 +74,7 @@ interface AbstractFooteredTextView {
|
||||||
val looksLikeRtl = layout.isRtlCharAt(lastVisibleCharacter)
|
val looksLikeRtl = layout.isRtlCharAt(lastVisibleCharacter)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Get required width for all lines
|
// Get required width for all lines (not using measuredWidth so wrap_content doesn't go match_parent if long lines enforced some line breaks)
|
||||||
var maxLineWidth = 0f
|
var maxLineWidth = 0f
|
||||||
for (i in 0 until layout.lineCount) {
|
for (i in 0 until layout.lineCount) {
|
||||||
// For some reasons, the getLineWidth is not working too well with RTL lines when rendering replies.
|
// For some reasons, the getLineWidth is not working too well with RTL lines when rendering replies.
|
||||||
|
@ -87,6 +88,9 @@ interface AbstractFooteredTextView {
|
||||||
max(layout.getLineWidth(i), maxLineWidth)
|
max(layout.getLineWidth(i), maxLineWidth)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Huge PillImageSpans might want to reserve more horizontal space with above approach than what is available,
|
||||||
|
// so ensure we don't give them more then super would, such that their auto-ellipsize feature works properly.
|
||||||
|
maxLineWidth = min(maxLineWidth, measuredWidth.toFloat())
|
||||||
|
|
||||||
// Fix wrap_content in multi-line texts by using maxLineWidth instead of measuredWidth here
|
// Fix wrap_content in multi-line texts by using maxLineWidth instead of measuredWidth here
|
||||||
// (compare WrapWidthTextView.kt)
|
// (compare WrapWidthTextView.kt)
|
||||||
|
|
Loading…
Reference in New Issue