在安卓中自动从px转换为sp或dp



我得到了一个布局设计,它以 px 表示大小,我将其保存在dimen资源文件中。

有没有一种自动方法可以以某种方式让 Android 将 px 单位自动转换为字符串的 sp 或其他大小的 dp,而无需我每次调用转换单位的方法?

如果没有,如果所有单位都是 px 格式,如何在布局的 xml 中定义特定大小?

你需要一直调用一个函数, 或者您需要创建自定义视图来扩展视图并覆盖自动转换它们的大小/文本大小函数

class CustomTextView : AppCompatTextView {
override fun setTextSize(size: Float) {
// do the convertion here
super.setTextSize(size)
}
override fun setTextSize(unit: Int, size: Float) {
// or here
super.setTextSize(unit, size)
}
}

如果您不想一直编写函数,则可能需要扩展一直使用 Dimens 的每个视图。

如果你读到这里,你就会明白你想要的不是最好的解决方案。

我建议您将所有px更改为dp,然后将其放在文件中

您的应用程序很可能适用于多个密度屏幕,因此像素方式是非常糟糕的选择

为 dp 设计布局

设计屏幕布局时,计算元素的 以 DP 为单位的测量:

dp = (宽度(像素( * 160(/密度

例如,屏幕密度为 320 的 32 x 32 像素图标等于 16 x 16 分。

更新

不幸的是,你想要的不可能发生。您必须为不同密度的屏幕生成不同的 dp 值。另请阅读官方文档中如何支持不同的屏幕密度

不幸的是,系统无法自动为您完成px到dp的转换。

但是,您可以为各种屏幕尺寸定义多个值文件夹,并为每个文件夹定义不同的尺寸(以 DP 为单位(。

有关更多详细信息,请参阅此问题:

如何为安卓中每个不同的屏幕尺寸定义 dimens.xml?

从PX到dp或sp的转换是你必须自己做的事情。

总而言之,您不应该这样做,因为 DP 和 SP 中定义的大多数时间值适用于大多数屏幕尺寸,因此请先尝试一下。

最新更新