在代码中指定像素单位是否可行?我的意思是,假设我有一个布局,并且我想要大小为20dp,那么是否有任何方法可以在不编写布局XML的情况下实现?
在代码中指定像素单位是否可行?我的意思是,假设我有一个布局,并且我想要大小为20dp,那么是否有任何方法可以在不编写布局XML的情况下实现?
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
在Activity中,当然不需要使用getContext()
。要将缩放像素(sp
)转换为像素,只需使用metrics.scaledDensity
而不是metrics.density
即可。TypedValue
来完成相同的事情:DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
int pixels = Math.round(fpixels);
对于sp
,用TypedValue.COMPLEX_UNIT_SP
代替TypedValue.COMPLEX_UNIT_DIP
。
内部上,applyDimension()
和我上面的代码做了完全相同的计算。使用哪个版本是你编码风格的问题。
dp
(或将 dp
赋值为你的变量值:float dp = randomVariable;
)。 - Ted Hoppmetrics.scaledDensity
而不是metrics.density
。我会更新答案以包含这些信息。谢谢您的提问。 - Ted Hopp您可以使用
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());
现在,pixels
的值相当于20dp
TypedValue包含其他类似的方法,有助于转换