Convert dip to px in Android

AndroidDensity Independent-Pixel

Android Problem Overview


I had written method to get the pixels from dip but it is not working. It give me runtime error.

Actually I was running this method in separate class and initialized in my Activity class

Board board = new Board(this);
board.execute(URL);

This code runs asynchronously. Please help me.

public float getpixels(int dp){
    //Resources r = boardContext.getResources();
    //float px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpis, r.getDisplayMetrics());
    	
    final float scale = this.boardContext.getResources().getDisplayMetrics().density;
    int px = (int) (dp * scale + 0.5f);

    return px;
}

Android Solutions


Solution 1 - Android

Try this:

Java

public static float dipToPixels(Context context, float dipValue) {
	DisplayMetrics metrics = context.getResources().getDisplayMetrics();
	return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

Kotlin

fun Context.dipToPixels(dipValue: Float) =
    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, resources.displayMetrics)

Solution 2 - Android

You can add the dp value in dimen.xml and use

int pixels = getResources().getDimensionPixelSize(R.dimen.idDimension);

It's easier...

Solution 3 - Android

The formula is: px = dp * (dpi / 160), for having on a 160 dpi screen. See Convert dp units to pixel units for more information.

You could try:

public static int convertDipToPixels(float dips) {
    return (int) (dips * appContext.getResources().getDisplayMetrics().density + 0.5f);
}

Hope this helps...

Solution 4 - Android

Try this for without passing context:

 public static float dipToPixels(float dipValue) {
     return TypedValue.applyDimension(
         TypedValue.COMPLEX_UNIT_DIP,
         dipValue,
         Resources.getSystem().getDisplayMetrics()
     );
 }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser961524View Question on Stackoverflow
Solution 1 - AndroidDmytro DanylykView Answer on Stackoverflow
Solution 2 - AndroidjuancazallaView Answer on Stackoverflow
Solution 3 - AndroidoriolponsView Answer on Stackoverflow
Solution 4 - AndroidExtendedScopeView Answer on Stackoverflow