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

pan*_*wal 7 android pixel android-layout

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

Ted*_*opp 28

在一个视图中:

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

在一项活动中,当然,你放弃了getContext().

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

编辑:正如@Santosh的回答指出的那样,你可以使用实用程序类做同样的事情TypedValue:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
int pixels = Math.round(fpixels);
Run Code Online (Sandbox Code Playgroud)

对于sp,替代TypedValue.COMPLEX_UNIT_SPTypedValue.COMPLEX_UNIT_DIP.

在内部,applyDimension()与上面的代码完全相同.使用哪个版本是您编码风格的问题.

  • 总结一下,这就是框架的作用.这确保了大小永远不会是0px. (3认同)
  • 你为什么加0.5? (2认同)