Android px、dp、sp相互转换工具类可以轻松让px,dp,sp之间相互转换,代码如下:
package com.tpyyes.util; import android.content.Context; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Display; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import java.util.concurrent.atomic.AtomicBoolean; /** * Created by judge on 2018/2/10. */ public class MetricsUtils { private static final int DEFLAUT_SIZE_DP = 360; /** * convert dp to its equivalent px * * 将dp转换为px */ public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } /** * convert px to its equivalent dp * * 将px转换为dp */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * convert px to its equivalent sp * * 将px转换为sp */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * convert sp to its equivalent px * * 将sp转换为px */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } public static int getWindowWidth(Context context){ // 获取屏幕分辨率 WindowManager wm = (WindowManager) (context.getSystemService(Context.WINDOW_SERVICE)); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int mScreenWidth = dm.widthPixels; return mScreenWidth; } public static int getWindowWidthDP(Context context){ return px2dip(context,getWindowWidth(context)); } public static int getWindowHeigh(Context context){ // 获取屏幕分辨率 WindowManager wm = (WindowManager) (context.getSystemService(Context.WINDOW_SERVICE)); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int mScreenHeigh = dm.heightPixels; return mScreenHeigh; } public static boolean isNeedAdapter(Context context){ WindowManager wm = (WindowManager) (context.getSystemService(Context.WINDOW_SERVICE)); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int mScreenHeigh = dm.heightPixels; int mScreenWidth = dm.widthPixels; if(px2dip(context,mScreenWidth) > DEFLAUT_SIZE_DP && px2dip(context,mScreenHeigh) > DEFLAUT_SIZE_DP){ return true; } return false; } public static void setBtnRadis(View btn, int radis) { LinearLayout.LayoutParams relativeLayoutParams = (LinearLayout.LayoutParams)btn.getLayoutParams(); relativeLayoutParams.width = radis; relativeLayoutParams.height = radis; btn.setLayoutParams(relativeLayoutParams); } private MetricsUtils(){ } public static void setTextSize( float scaleSize, View... btns) { for (View btn :btns) { if(btn instanceof Button) { ((Button)btn).setTextSize(TypedValue.COMPLEX_UNIT_PX, scaleSize); } if(btn instanceof TextView) { ((TextView)btn).setTextSize(TypedValue.COMPLEX_UNIT_PX,scaleSize); } } } public static void scaleRelativeLayoutNoWH(View btn, double scaleRatio) { RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams)btn.getLayoutParams(); relativeLayoutParams.setMargins((int)(relativeLayoutParams.leftMargin * scaleRatio + 0.5), (int)(relativeLayoutParams.topMargin * scaleRatio + 0.5), (int)(relativeLayoutParams.rightMargin * scaleRatio + 0.5), (int)(relativeLayoutParams.bottomMargin * scaleRatio + 0.5)); btn.setLayoutParams(relativeLayoutParams); } public static void scaleRelativeLayoutAndWH(View btn, double scaleRatio) { RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams)btn.getLayoutParams(); relativeLayoutParams.width = (int) (relativeLayoutParams.width * scaleRatio + 0.5); relativeLayoutParams.height = (int) (relativeLayoutParams.height * scaleRatio + 0.5); relativeLayoutParams.setMargins((int)(relativeLayoutParams.leftMargin * scaleRatio + 0.5), (int)(relativeLayoutParams.topMargin * scaleRatio + 0.5), (int)(relativeLayoutParams.rightMargin * scaleRatio + 0.5), (int)(relativeLayoutParams.bottomMargin * scaleRatio + 0.5)); btn.setLayoutParams(relativeLayoutParams); } public static void scaleLinearLayoutAndWH(View btn, double scaleRatio) { LinearLayout.LayoutParams relativeLayoutParams = (LinearLayout.LayoutParams)btn.getLayoutParams(); relativeLayoutParams.width = (int) (relativeLayoutParams.width * scaleRatio + 0.5); relativeLayoutParams.height = (int) (relativeLayoutParams.height * scaleRatio + 0.5); btn.setLayoutParams(relativeLayoutParams); } public static void scaleFrameLayoutAndWH(View btn, double scaleRatio) { FrameLayout.LayoutParams relativeLayoutParams = (FrameLayout.LayoutParams)btn.getLayoutParams(); relativeLayoutParams.width = (int) (relativeLayoutParams.width * scaleRatio + 0.5); relativeLayoutParams.height = (int) (relativeLayoutParams.height * scaleRatio + 0.5); btn.setLayoutParams(relativeLayoutParams); } }