我得到了一个布局设计,它以 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 中定义的大多数时间值适用于大多数屏幕尺寸,因此请先尝试一下。