Android中 dp 与 px 单位转换

px   :是屏幕的像素点

in    :英寸

mm :毫米

pt    :磅,1/72 英寸

dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px

dip  :等同于dp

sp   :同dp相似,但还会根据用户的字体大小偏好来缩放。

建议使用sp作为文本的单位,其它用dip

针对dip和px 的关系,做以下概述:

QVGA屏density=120;          QVGA(240*320)

HVGA屏density=160;          HVGA(320*480)

WVGA屏density=240;         WVGA(480*800)

WQVGA屏density=120          WQVGA(240*400)

density值表示每英寸有多少个显示点,与分辨率是两个概念。

不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)为例

density=120时

屏幕实际分辨率为240px*400px (两个点对应一个分辨率)

状态栏和标题栏高各19px或者25dip

横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip

竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip

density=160时

屏幕实际分辨率为320px*533px (3个点对应两个分辨率)

状态栏和标题栏高个25px或者25dip

横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip

竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip

density=240时

屏幕实际分辨率为480px*800px (一个点对于一个分辨率)

状态栏和标题栏高个38px或者25dip

横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip

竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip

apk的资源包中

当屏幕density=240时,使用hdpi 标签的资源

当屏幕density=160时,使用mdpi标签的资源

当屏幕density=120时,使用ldpi标签的资源。

不加任何标签的资源是各种分辨率情况下共用的。

布局时尽量使用单位dip,少使用px

dp与px换算公式:

pixs =dips * (densityDpi/160).
dips=(pixs*160)/densityDpi

dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)

但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因为可以支持多种分辨率的手机.

以下是这两个单位的概念:

px (pixels)像素 –一个像素通常被视为图像的最小的完整采样,这个用的比较多,特别是web开发,页面基本都是使用像素作为单位的.

dip或dp (device independent pixels)设备独立像素 — 这个和设备硬件有关,一般我们为了支持手机上多种分辨率,如WVGA、HVGA和QVGA,都会使用dip作为长度的单位

在Android开发我们一般都可以不需要使用px的,但是某一些控件的属性没有直接支持dip,像下面的代码

android.view.ViewGroup.LayoutParams.height
android.view.ViewGroup.LayoutParams.width

上面这两个属性的单位为像素,但是为了兼容多种分辨率的手机,我们需要最好使用dip,时候我们可以调用以下的代码进行转换.

int heightPx= DisplayUtil.dip2px(this, 33);
mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = heightPx;

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

public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
时间: 2024-12-12 15:23:16

Android中 dp 与 px 单位转换的相关文章

Android 中dp和px

dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如: 在320x480分辨率,像素密度为160,1dp=1px 在480x800分辨率,像素密度为240,1dp=1.5px 计算公式: 1dp*像素密度/160 = 实际像素数 float density = context.getResources().getDisplayMetrics().density; px = (int)(dp * scale + 0.5f); dp = (int)(px / scale + 0.5f);

Android中dp和px之间进行转换

在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip).一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致.但是在代码中,如何处理呢?很多控件的方法中都只提供了设置px的方法,例如setPadding,并没有提供设置dp的方法.这个时候,如果需要设置dp的话,就要将dp转换成px了. 以下是一个应用类,方便进行px和dp之间的转换. import android.content.Context; public class DensityUtil { /**

Android系统中的dp和px的转换

android系统中DP和SP的转化:1.首先分析TypedValue.java 可以调用以下代码获得dp的值 TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20,getResources().getDisplayMetrics()); public static float applyDimension(int unit, float value,DisplayMetrics metrics) { switch (unit) {

[转]Android中dp,px,sp概念梳理以及如何做到屏幕适配

http://blog.csdn.net/jiangwei0910410003/article/details/40509571 今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI很少,刚开始做Android应用的时候,没有对dp,px,sp等概念有一个深入的了解,只知道他们之间的转化,还有写个转换工具类等.做Android已经有一年多了,现在再次开始App开发,决定没遇到一个概念,必须得弄透彻.好吧,下面进入主题吧: 首先来看一下他们的基本概念: px   :是屏幕的像素点

Android中dp,px,sp概念梳理

今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI很少,刚开始做Android应用的时候,没有对dp,px,sp等概念有一个深入的了解,只知道他们之间的转化,还有写个转换工具类等.做Android已经有一年多了,现在再次开始App开发,决定没遇到一个概念,必须得弄透彻.好吧,下面进入主题吧: 首先来看一下他们的基本概念: px   :是屏幕的像素点dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip  :等同于dpsp   :同dp相

Android 中的长度单位px、dp、sp

1.px 这个不用太多解释,就是屏幕上的一个物理像素点.眼神好的小伙伴仔细看下应该能看到屏幕上的小格子,不行就滴一滴水再看. 不建议使用px,同样的图片在不同手机上显示大小可能不同.分辨率高的显示的小,分辨率低的显示的大. 2.dp 这个单位要认真理解,它和像素密度相关.先说像素密度dpi,即单位英寸的像素点数量.假如我的手机屏幕尺寸为1.5英寸x2英寸,分辨率为240x320,那它的像素密度即为160dpi. Android 系统定义了4种分辨率:低(120dpi).中(160dpi).高(2

Android dp和px之间转换 及 获取坐标

dp.px.sp转换 1 public class DensityUtil { 2 /** 3 * 将px值转换为dip或dp值,保证尺寸大小不变 4 * 5 * @param pxValue 6 * @param scale 7 * (DisplayMetrics类中属性density) 8 */ 9 public static int px2dip(float pxValue, float scale) { 10 return (int) (pxValue / scale + 0.5f);

android dp和px之间转换

dp.sp 和 px 的区别: dp 也就是 dip.一种基于屏幕密度的抽象单位,在每英寸160点的显示器上,1dp=1px.这个和 sp 基本类似.如果设置表示长度.高度等属 性时可以使用 dp 或 sp.但如果设置字体,需要使用 sp.dp 是与密度无 关,sp 除了与密度无关外,还与 scale 无关. sp: scaled pixels(放大像素). 主要用于字体显示(best for textsize). px:表示屏幕实际的象素.例如,320*480 的屏幕在横向有 320 个象素,

对Android中dp单位的理解

dp 设备独立像素 ,也叫dip, device independent pixle. 比如同样在1英寸大小的屏幕上,高密度的屏幕可显示100个像素点,而低密度的屏幕只能70个点. 用了dp之后,只要设置一个dp的大小,这个dp的大小是个固定的值(固定大小区域), 在不同的屏幕上都要显示这么大的区域,至于用多少个像素点来显示,它不在乎.