Answers:
它使用像素,但我确定您想知道如何使用浸入度。答案在TypedValue.applyDimension()
。这是如何在代码中将Dip转换为px的示例:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
在代码中获取恒定数量的DIP的正确方法是创建一个包含dp值的资源XML文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
然后像这样在代码中引用资源:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
您返回的浮点数将根据设备的像素密度进行相应缩放,因此您无需在整个应用程序中始终复制转换方法。
setWidth(100)方法,将100 px设置为宽度(不在dp中)。因此您可能会在不同的android手机上遇到宽度变化的问题。因此在dp中而不是像素中使用度量。使用以下代码在样本宽度的dp中获得度量= 300px和高度= 400px。
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
像素当然,该方法要求像素作为参数。
根据以上对我来说很好的答案,我生成了一些辅助方法,只需将它们添加到您的utils中即可在整个项目中使用它们。
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}