我想从 px程序化地计算 dp。怎么做? 我的决心来自:
px
dp
DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); ht = displaymetrics.heightPixels; wt = displaymetrics.widthPixels;
这应该会给你转换像素-> dp:
DisplayMetrics displaymetrics = new DisplayMetrics(); int dp = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, myPixels, displaymetrics );
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); String str_ScreenSize = "The Android Screen is: " + dm.widthPixels + " x " + dm.heightPixels; TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize); mScreenSize.setText(str_ScreenSize);
你能去看看吗。
或者这也可以帮助你
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) 123.4, getResources().getDisplayMetrics());
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics()); float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics());
这里的所有答案都显示了 Dp-> px转换,而不是 OP 要求的 Px-> dp转换。 请注意,TypedValue.applyDimension不能用于转换 px-> dp,因为您必须使用这里描述的方法: https://stackoverflow.com/a/17880012/504611(为方便起见,在下面引用)。
TypedValue.applyDimension
fun Context.dpToPx(dp: Int): Int { return (dp * resources.displayMetrics.density).toInt() } fun Context.pxToDp(px: Int): Int { return (px / resources.displayMetrics.density).toInt() }