I created my application, which is in pixels in height and width, for a 480x800 resolution Pantech device.
I need to change the height and width of the G1 device. I think converting it to dp will solve the problem and provide the same solution for both devices.
Is there an easy way to convert pixels to dp? What's your suggestion?
#1 building
Best placed in the Util.java class
public static float dpFromPx(final Context context, final float px) { return px / context.getResources().getDisplayMetrics().density; } public static float pxFromDp(final Context context, final float dp) { return dp * context.getResources().getDisplayMetrics().density; }
#2 building
If you are developing performance critical applications, consider the following optimization classes:
public final class DimensionUtils { private static boolean isInitialised = false; private static float pixelsPerOneDp; // Suppress default constructor for noninstantiability. private DimensionUtils() { throw new AssertionError(); } private static void initialise(View view) { pixelsPerOneDp = view.getResources().getDisplayMetrics().densityDpi / 160f; isInitialised = true; } public static float pxToDp(View view, float px) { if (!isInitialised) { initialise(view); } return px / pixelsPerOneDp; } public static float dpToPx(View view, float dp) { if (!isInitialised) { initialise(view); } return dp * pixelsPerOneDp; } }
#3 building
This is the way it works for me:
DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int h = displaymetrics.heightPixels; float d = displaymetrics.density; int heightInPixels=(int) (h/d);
You can do the same for width.
#4 building
Elegant static method without Context:
public static int dpToPx(int dp) { return (int) (dp * Resources.getSystem().getDisplayMetrics().density); } public static int pxToDp(int px) { return (int) (px / Resources.getSystem().getDisplayMetrics().density); }
#5 building
If you can use dimension XML, it's very simple!
In RES / values / dimensions.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="thumbnail_height">120dp</dimen> ... ... </resources>
Then in your Java:
getResources().getDimensionPixelSize(R.dimen.thumbnail_height);