DPI和px直接的关系

首先屏幕的分辨率和dpi,px没有关系。 因为有 1080x1920的电视屏幕(45英寸), 也有1080x1920的手机屏幕(5.5英寸)

一英寸有多少个点儿?	我们用来density来分辨

ldpi 120dpi 0.75
mdpi 160dpi 1 一般是HVGA hdpi 240dpi 1.5 一般是WVGA xhdpi 320dpi 2 xxhdpi 480dpi 3

在160dpi的设备上 DIP(也就是我们用的dip/dp):device independent pixel,设备独立像素, 一英寸的像数数,我们不会直接使用px,而是使用dp,px = 1dp * density(由DPI)决定。

在mdpi设备上 1dip = 1px 在xxhdpi设备上 1dip = 3px

尽量使用widget的宽高尽量使用dp,字体使用sp,让系统自己按照比例适配。

参考文章中还提到了在一些非常规的设备上 如何适配尺寸和大小。 总的来说,如果是图片 可以先按照最大的设备进行切图,widget的宽高设置成wrap_content即可,其余小图的尺寸可以按照上面的比列进行切图。

对于一些必须定义出的宽高,则使用 values-mdpi/dimens.xml values-hdpi/dimens.xml values-xhdpi/dimens.xml values-xxhdpi/dimens.xml values/dimens.xml 来适配不同的大小。

不同分辨率的布局: layout-640x360,layout-800x480

手机上px和dp,sp之间的转化

private static final float scale = mContext.getResources().getDisplayMetrics().density;

private static final float scaledDensity = mContext.mContext.getResources().getDisplayMetrics().scaledDensity;

/**

  • dp转成px
  • @param dipValue
  • @return */ public static int dip2px(float dipValue) { return (int) (dipValue * scale + 0.5f); }

/**

  • px转成dp
  • @param pxValue
  • @return */ public static int px2dip(float pxValue) { return (int) (pxValue / scale + 0.5f); }

/**

  • sp转成px
  • @param spValue
  • @param type
  • @return */ public static float sp2px(float spValue, int type) { switch (type) { case CHINESE: return spValue * scaledDensity; case NUMBER_OR_CHARACTER: return spValue * scaledDensity * 10.0f / 18.0f; default: return spValue * scaledDensity; } }

参考 http://www.paibaidu.com/index.php/2014/08/13/966.html http://www.2cto.com/kf/201410/346962.html

转载于:https://my.oschina.net/panyingyun/blog/352830

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值