注意:上面广泛使用的解决方案基于displayMetrics.density。但是,文档解释说这个值是一个舍入值,与屏幕“桶”一起使用。例如。在我的Nexus 10上,它返回2,其中实际值为298dpi(实际)/ 160dpi(默认值)= 1.8625。
根据您的要求,您可能需要精确的转换,可以这样实现:
[编辑]这并不意味着与Android的内部dp单元混合,因为这当然仍然基于屏幕存储桶。如果您希望在不同设备上呈现相同实际大小的单位,请使用此选项。
将dp转换为像素:public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); }
将像素转换为dp:public int pxToDp(int px) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));}
请注意,有xdpi和ydpi属性,您可能想要区分,但我无法想象这些值差别很大的理智显示。