package com.rivc.myapplication; import android.content.Context; import android.graphics.Point; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Display; public class MainActivity extends AppCompatActivity { private int width; private int height; private static float density = 0f; private static float defaultDensity = 1.5f;// 高分辨率的手机density普遍接近1.5 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Display display = this.getWindowManager().getDefaultDisplay(); Point size = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { display.getSize(size); width = size.x; height = size.y; } else { width = display.getWidth(); height = display.getHeight(); } Log.e("px", "width: " + width + " height: " + height); Log.e("dp by px2dp", "width: " + px2dp(this, width) + " height: " + px2dp(this, height)); Log.e("px by dp2px", "width: " + dp2px(this, px2dp(this, width)) + " height: " + dp2px(this, px2dp(this, height))); } public static int px2dp(Context context, float pxValue) { int dp; if (density == 0) { if (context != null) { density = getDensity(context); } if (density == 0) { density = defaultDensity; } } dp = (int) (pxValue / density + 0.5f); return dp; } public static int dp2px(Context context, float dpValue) { int px; if (density == 0) { if (context != null) { density = getDensity(context); } if (density == 0) { density = defaultDensity; } } px = (int) (dpValue * density + 0.5f); return px; } public static float getDensity(Context context) { return context.getResources().getDisplayMetrics().density; } }
转发的请标明出处,谢谢!