浅谈dp,px View.setLayoutParams

ppi的运算方式是:

PPI = √(长度像素数2 + 宽度像素数2) / 屏幕对角线英寸数

dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,

dp和px的换算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。



sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。

sp 与 px 的换算公式:sp*ppi/160 = px



概括起来:

px = dp*ppi/160
dp = px / (ppi / 160)

px = sp*ppi/160
sp = px / (ppi / 160)

dp = sp? 

更多详情—-参考链接

public static int dip2px(Context context,float dipValue){
     final float scale=context.getResouses().getDisplayMetrics().density;
     return (int)(dipValue*scale+0.5f);
}

public static int px2dp(Context context,float pxValue){
    final float scale = context.getResource.getDisplayMetrics().density; 
    return (int)(pxValue/scale+0.5f); 
}

更多详情—-参考链接

另外:mlogger.info(getResources().getDimension(R.dimen.margin_normal)); 从xml所获取到的会是转换为px的float型数据。

3.用代码设置控件位置(代码设置会覆盖xml里面设置的参数):

    LinearLayout.LayoutParams fp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
 int margin = ViewUtil.dip2px(context, 10);
 fp.setMargins(margin, 0, margin, margin * 2);
 flowLayout.setLayoutParams(fp);

你可能感兴趣的:(dp)