实际上我可以使用getWindowManager()。getDefaultDisplay()找到屏幕宽度。现在我想知道如何从像素中得到的值得到dp的值。例如,假设我使用 -
得到屏幕的宽度用于获取宽度的代码
Display display = getWindowManager().getDefaultDisplay();
int width= display.getWidth();
现在我得到的宽度是像素,我如何将其转换为dp。
请帮我解决这个问题。我已经在android文档中看到了,但是不知道如何实现它。
答案 0 :(得分:2)
如果要将dp值转换为像素,可以使用以下公式:
DisplayMetrics metrics = getWindowManager().getDefaultDisplay().getMetrics(metrics);
float logicalDensity = metrics.density;
int px = (int) (dp * logicalDensity + 0.5);
要从像素获取dp,请将密度除以像素值而不是乘以。
答案 1 :(得分:2)
例如:在dimens.xml
文件夹中创建新的res/values
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dim_5dp">5dp</dimen>
</resources>
然后在你的活动中:
int pixels = getResources().getDimensionPixelSize(R.dimen.dim_5dp);
好处是getDimensionPixelSize()处理零大小,在这种情况下它返回至少1个像素。
答案 2 :(得分:1)
您需要使用屏幕的像素密度在实际像素和dp之间进行转换。这在Android developer portal/guide here中有所描述。看看
答案 3 :(得分:0)
最短的方法是使用TypedValue。
public static float pxToDp(Context context, float pixel) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, pixel, context.getResources().getDisplayMetrics());
}