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

时间:2017-07-17 11:08:01

标签: android pixel scaling

我有一个布局设计,用于说明我在dimen资源文件中保存的px大小。

是否有一种自动方式可以让Android自动将px单元转换为sp用于字符串或dp用于其他大小,而不需要每次调用一个方法来转换单元?

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

3 个答案:

答案 0 :(得分:1)

如果您阅读here,您就会明白您想要的并不是最佳解决方案。

我建议你将所有px更改为dp然后将它们放在文件上

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

  

设计dp的布局

     

在设计屏幕布局时,计算元素   dp中的测量值:

     

dp =(宽度,以像素为单位* 160)/密度

     

例如,屏幕密度为320的32 x 32 px图标等于16   x 16 dp。

<强>更新

不幸的是,你想要的不可能发生。您必须为不同的密度屏幕生成不同的dp值。另请阅读official documentation

中如何支持不同的屏幕密度

答案 1 :(得分:1)

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

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)
    }
}
如果你不想一直写一个函数,你可能需要扩展所有使用维度的视图。

答案 2 :(得分:-1)

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

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

请参阅此问题以获取更多详细信息:

How to define dimens.xml for every different screen size in android?

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

并得出结论,你不应该这样做,因为dp和sp中定义的大多数时间值都适合大多数屏幕尺寸,所以先试试。