Android在不使用XML的情况下指定像素单位(如sp,px,dp)

时间:2011-02-16 05:31:46

标签: android android-layout pixel

是否可以在代码中指定像素单位。 我的意思是,说我有一个布局,我希望大小为20dp,那么有没有办法这样做而无需在布局xml中写入

2 个答案:

答案 0 :(得分:27)

在视图中:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);

在活动中,当然,您不用getContext()

要从缩放像素(sp)转换为像素,只需使用metrics.scaledDensity代替metrics.density

编辑:正如@Santosh's answer指出的那样,您可以使用实用程序类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()的计算与我上面的代码完全相同。使用哪个版本是您编码风格的问题。

答案 1 :(得分:4)

您可以使用

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());

现在,pixels的值相当于20dp

TypedValue包含其他有助于转换的类似方法