- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道如何将 Jetpack Compose 中的文本与基线对齐。
但是现在我需要对齐两个不同大小的文本,它们在 Row
中彼此跟随。由 ascent这两种字体中较大的一种。如果有意义的话,我想将其视为“按顶部基线”对齐两个文本。 Modifier.align(Alignment.Top)
不起作用,因为它不会通过上升对齐,而是通过布局的顶部对齐,然后文本在顶部没有正确对齐。
我试图看看如何做到这一点,但显然没有现成的功能或修饰符?我什至没有找到在 Compose 中访问 Text 的 ascent 属性等的方法。所以不确定这怎么可能?
感谢您的任何提示! :)
编辑 : 这是 Alignment.Top
时的样子用来。但我希望这两个文本在顶部对齐。
最佳答案
所有关于文本布局的信息都可以通过 onTextLayout
检索。 Text
争论。在这种情况下,您需要一个行大小,可以使用 getLineBottom
检索。 ,以及实际字体大小,可在 layoutInput.style.fontSize
中找到.
我同意如果你能用一些简单的方法来做这件事会更容易,所以我给你的feature request加了星标。 ,但现在你可以计算它:
onTextLayout = { textLayoutResult ->
val ascent = textLayoutResult.getLineBottom(0) - textLayoutResult.layoutInput.run {
with(density) {
style.fontSize.toPx()
}
}
},
对齐两个文本的完整示例:
val ascents = remember { mutableStateMapOf<Int, Float>() }
val texts = remember {
listOf(
"Big text" to 80.sp,
"Small text" to 20.sp,
)
}
Row(
Modifier
.drawBehind {
ascents.maxOfOrNull { it.value }?.let {
drawLine(Color.Red, Offset(0f, it), Offset(size.width, it))
}
}
) {
texts.forEachIndexed { i, info ->
Text(
info.first,
fontSize = info.second,
onTextLayout = { textLayoutResult ->
ascents[i] = textLayoutResult.getLineBottom(0) - textLayoutResult.layoutInput.run {
with(density) {
style.fontSize.toPx()
}
}
},
modifier = Modifier
.alpha(if (ascents.count() == texts.count()) 1f else 0f)
.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
val maxAscent = ascents.maxOfOrNull { it.value } ?: 0f
val ascent = ascents[i] ?: 0f
val yOffset = if (maxAscent == ascent) 0 else (maxAscent - ascent).toInt()
layout(placeable.width, placeable.height - yOffset) {
placeable.place(0, yOffset)
}
}
)
}
}
结果:
关于android - 在 Jetpack Compose 中按字体的上升而不是基线对齐两个文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70531951/
我问我任务buildDependent是否还会建立第一级依赖项目的依赖项。 其他受抚养者不是过渡依赖于最初的项目吗? 为了更好地理解我的意思:D-> A <-B <-C 项目B和D是A的第一层依赖,而
function hoverimgon(elem){ $(elem).find('.credentials-popup').slideDown(800); }
我有一个数据集,其中每一行代表某些行为的发生次数。这些列代表设定时间量的窗口。它看起来像这样: +----------+----------+----------+----------+-------
这是我在这个网站上要问的第一个问题,如果我的处理方式有误,请务必告诉我。 无论如何,在我创建的对象 (dog) 中,我有一个“实时”函数,它通过使用 javascript 的 setInterval
我的网站上有一个谷歌图表,它是一个折线图。但是我的 Y 轴数据值只会以整数形式增加,所以我不想在 Y 轴上有“4.5”值,如您所见: 如果有人能指出正确的方向,我将不胜感激! 最佳答案 您应该使用以下
我有一个错误,当显示键盘并且切换键盘顶部的预测文本框时, View 会弹出,让用户看到黑屏。发生这种情况的原因是因为我使用了 -= 运算符,每次调用此方法时都会使值复合。该方法可以连续调用多次。我正试
我知道如何通过为父级执行 position:absolute 和为子级执行 position:relative 来将 div 堆叠在 div 之上,但是我如何制作一个 div从另一个分区“升起”?我想
我正在使用最新版本的 ionic 2。我的代码有一个 里面有一个文本输入。当我尝试在 Android 上输入内容时,整个页面都会被键盘向上推。 html文件
我正在使用最新版本的 ionic 2。我的代码有一个 里面有一个文本输入。当我尝试在 Android 上输入内容时,整个页面都会被键盘向上推。 html文件
我正在尝试解析 truetype 字体以构建和存储每个字体大小的上升部分、下降部分,我正在使用 http://nodebox.github.io/opentype.js/这做得非常出色,但我不明白如何
我的布局需要 windowSoftInputMode= adjustmentRezise,以便我的按钮与键盘一起上升。但我不希望我的 BottomNagivationView 受到此影响。我该如何解决
This answer不适用于 WebView,this doesn't任何一个。所以这个问题是专门针对使用 WebView 的。下面的代码加载了一个带有文本输入字段的网页。单击文本输入字段时,会出现
我在将 onOptionsItemSelected 与 Android Studio 的默认“设置 Activity ”(扩展 AppCompatPreferenceActivity)一起使用时遇到问
我是一名优秀的程序员,十分优秀!