当我插入fontSize = dimensionResource(id = R.dimen.textLabelTextSize),其中dimens或54sp或60sp取决于设备时,我在Text()上得到一个错误“下面的函数都不能用提供的参数调用。”但是当我输入一个硬编码值,如54sp时,它就没问题了。奇怪的是填充修饰符dimensionResource(在dp中)工作正常。
Text(
text = textLabelItem.textLabel,
modifier = Modifier
.padding(
start = dimensionResource(id = R.dimen.textLabelPaddingVertical),
top = dimensionResource(id = R.dimen.textLabelPaddingHorizontalTop),
end = dimensionResource(id = R.dimen.textLabelPaddingVertical),
bottom = dimensionResource(id = R.dimen.textLabelPaddingHorizontalBottom)
)
.background(colorResource(id = R.color.textLabelBg))
.border(
width = 2.dp,
color = colorResource(id = R.color.textLabelBorder),
shape = RoundedCornerShape(8.dp)
),
color = colorResource(id = android.R.color.background_dark),
fontSize = dimensionResource(id = R.dimen.textLabelTextSize),
fontWeight = FontWeight.Bold
)
6条答案
按热度按时间u7up0aaq1#
答案很简单,你只是忘记了处理
dimensionResource
的结果。你只需要使用它的value
就可以让它成为float。然后使用sp
扩展,就可以开始了。我为此创建了自己的扩展:
因此,使用
fontDimensionResource(R.dimen.your_font_size)
代替dimensionResource(R.dimen.your_font_size)
最终溶液:
o2g1uqev2#
要从
dp
转换为sp
,您需要考虑字体缩放-这是使用sp
进行文本的要点。这意味着当用户更改系统字体比例时,应用程序会响应此更改。不缩放文本
如果我们在Kotlin中请求
dimensionResource()
,我们得到的dp值还没有缩放。您可以在源代码中确认这一点,其中该函数被定义为返回Dp
:到
value.sp
* 的基本转换不会应用所需的缩放 *,因此任何依赖于这种基本计算的解决方案都无法正常工作。(其中
R.dimen.sp_size
是使用sp
大小调整声明的维度资源)这将无法正确缩放文本大小。
更好的解决方案
为了正确地执行,我们需要查看
DisplayMetrics
和当前scaledDensity
值,定义为:这个缩放值必须应用于获取的维度,以返回可用作
sp
的内容:**警告:**此操作仅适用于定义为
sp
的尺寸!不同维度类型的处理
一个更好的解决方案是检查正在访问的维度资源的类型,然后基于此进行计算,即
dp
、sp
或px
。这确实需要使用
TypedValue
和TypedArray
,这使得它有点复杂,但是可以在MDC主题适配器的TypedArrayUtils中找到示例代码:最佳方案
理想情况下,我们不应该在使用Compose时提取资源并转换它们。我们应该使用主题常量。
我们可能都在这个页面上,因为我们有一些XML布局和其他的撰写。我们可能正在经历转换过程。
处理此类转换的最佳方法是使用Material Components MDC-Android Compose Theme Adapter来处理所有这些情况。
它的工作原理不仅仅是一个文本大小计算,这是我们应该在我们迁移到撰写的一部分。
8yoxcaq73#
这是因为函数**
dimensionResource
**返回Dp
值,而fontSize
使用Sp
值。目前你不能使用它。
dzjeubhm4#
方法
dimensionResource
返回dp
值。要从中获得sp
值,请在末尾添加.value.sp
,如下所示:fontSize = dimensionResource(id = R.dimen.textLabelTextSize).value.sp
uz75evzq5#
考虑创建此
并按如下方式使用它
dffbzjpn6#
从维数中得到sp的正确方法是
以下是文档:https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density#(androidx.compose.ui.unit.Dp).toSp()