摩客怎么设置安卓的dp_安卓的显示单位dp、dip、px、sp

dp==dip:设备独立像素 。(device independent pixels)

dip是年迈的dp,已经退休,在比较老的代码中还可以看到dip。目前谷歌推荐用dp,在我们开发安卓程序的时候,除了字体之外,都推(强)荐(制)使用dp。

sp:比例像素。(scaled pixels )

sp一般用于处理字体、安卓有个东西叫做大字体,那玩意就是专门调整sp的。所以所有关于字体的单位,推(强)荐(制)使用sp。

px:像素(pixels)

px即手机上面的物理点,属于物理范畴的,所以在写安卓程序的时候不建议使用。

安卓手机凭密度分为  :低密度(120dpi)、中密度(160dpi)、高密度(240dpi)、超高密度(320dpi)、超超高密度(480dpi)

按照谷歌的编码规范对应:ldpi                  、mdpi                 、hdpi                、xhdpi        、xxhdpi

此处不考虑屏幕的尺寸,因为同一密度的手机,尺寸可能相差较多,这时你会要求图依据手机尺寸进行不同程度的缩放和拉伸以适应屏幕的大小。这也正是我们推(强)荐(制)使用dp的原因,dp会根据手机的密度对尺寸进行适配,这保证了同一密度的手机,只需要一组图即可。

计算手机的密度: 密度 = √(长²+宽²)/对角线长度     其中对角线长度用英寸  算下来的如果等于164 就约等于160

在160dpi下,即mdpi中,1dp == 1px ==1sp;(一般dp不与sp进行比较,仅在160dpi下其相等)

在320dpi下,即xhpdi中,1dp == 2px

在480dpi下,即xxhpdi中,1dp == 3px

我们可以知道  1dp = (当前dpi/160dpi)px。

现实中,一般作为开发人员,可以找UX或者UI要图的时候就需要计算一下几乘几,否则很容易造成误解。

然而代码中,可以使用如下代码进行dp px的转换,同时也提供px和sp的转换(注意不是sp和dp,因为无意义)。

[java] view plaincopy

import android.content.Context;

/**

* dp、sp 转换为 px 的工具类

*

* @author fxsky 2012.11.12

*

*/

public class DisplayUtil {

/**

* 将px值转换为dip或dp值,保证尺寸大小不变

*

* @param pxValue

* @param scale

* (DisplayMetrics类中属性density)

* @return

*/

public static int px2dip(Context context, float pxValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (pxValue / scale + 0.5f);

}

/**

* 将dip或dp值转换为px值,保证尺寸大小不变

*

* @param dipValue

* @param scale

* (DisplayMetrics类中属性density)

* @return

*/

public static int dip2px(Context context, float dipValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (dipValue * scale + 0.5f);

}

/**

* 将px值转换为sp值,保证文字大小不变

*

* @param pxValue

* @param fontScale

* (DisplayMetrics类中属性scaledDensity)

* @return

*/

public static int px2sp(Context context, float pxValue) {

final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;

return (int) (pxValue / fontScale + 0.5f);

}

/**

* 将sp值转换为px值,保证文字大小不变

*

* @param spValue

* @param fontScale

* (DisplayMetrics类中属性scaledDensity)

* @return

*/

public static int sp2px(Context context, float spValue) {

final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;

return (int) (spValue * fontScale + 0.5f);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值