Android px, dp, sp的区别

Android自兴起以来,开发者不断增加,与此同时市场上参差不齐的设备也不断增加,随之而来的则是开发者需要适配众多机型而带来的困扰与抱怨。并且随着不同厂家定制化不同的ROM,Android设备的碎片化现象日益严重。这篇文章主要讲述如何设计中严格遵从设计图标准的Android页面。

1. px, dp, sp区别

什么是px

px就是我们通常所说的像素的单位,在css里面,我们用px比较多。px主要指用户在屏幕上看到的事物的实际大小单位。

什么是dp

在看手机或者电脑参数时,我们经常说到一个关键词,屏幕分辨率(resolution),分辨率被表示成每一个方向上的像素数量,比如800x480分辨率

上图中,我们可以看到15寸的retina pro分辨率是2880x1800,而60寸的HDTV分辨率却只有1920x1080。可见如果60寸的HDTV也要达到Retina的显示效果,其分辨率大概至少为11520x7200。

既然已经有了分辨率的概念,那么我们就可以了解 dpi(dot per inch)的概念了。dpi本意是每英寸点的数量,但是也经常和ppi(pixel per inch)混用。指每英寸的像素数量,也被我们称为屏幕密度,dpi越大,图像从视觉上看起来越清晰。

Google官方对dp的解释如下:

A virtual pixel unit that you should use when defining UI layout, to express layout dimensions or position in a density-independent way.

The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a “medium” density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application’s UI, to ensure proper display of your UI on screens with different densities.

有了密度的概念,我们可以更好的理解dp(density independent pixel)了。dp是Android中用来定义UI布局中表达元素尺寸或位置的一个虚拟的像素单位,dp的存在是为了页面元素位置不受屏幕密度所影响。以设计师设计一个APP页面为例,设计师希望用户视觉上看起来如此,也就是设计师设计时通常以px作为基础单位。而在其他不同屏幕密度的设备中,也希望能够进行一定的伸缩,类似于维持一个相对一致的百分比。所以开发者通常需要以dp为单位,以适应不同密度的屏幕。

所以dp和px之间有一套换算标准:px = dp * (dpi / 160)。假设在dpi为320的屏幕上,1dp = 2px。

什么是sp

sp是Android中专业为字体而设置的单位。使用sp作为字体单位不仅能够使字体大小受屏幕密度影响,并且能够使字体受用户系统设置的影响。Android提供字体大小的设置选项。一旦使用sp作为字体,根据用户设置字体的不同,App中的字体大小也会显示不同。但是在正常字体设置下,1dp = 1sp。

2. 设计师视角

Android的多屏适配存在这么多的尺寸,自然需要设计师和工程师之间找到沟通的桥梁,设计师如何规范设计才能够更加符合Android的设计标准呢。设计师与工程师对于页面的尺寸需要有一个共识性的标准,测试人员才可能进行更有效的测试,才不致于因为不同机型显示不同效果而引起不必要的工作量。

首先我们需要选择一个相对通用的屏幕尺寸,可以参考现有的一些主流机型的尺寸。为了便于计算,我们选择Nexus 4作为设计图的原版标准。那么所有的页面都是基于Nexus4而产生的。Nexus4尺寸如下:

主屏尺寸4.7,主屏分辨率:1280x768像素,屏幕像素密度320ppi。

一般来说,我们选择市场上最常见的机型来设计,这里我们为了计算方便,选择320ppi的机型,设计图中尺寸将是标准图中的2倍。假设在设计图中,页面内边距为32px, 按钮的高度为96px, icon大小为48x48。

通过px=dp*(dpi/160)的标准,设计师给开发者标注图时可标注页边距为16dp,按钮高度为48dp,icon则分别出四套mdpi, hdpi, xhdpi, xxhdpi标准。

3. 开发者视角

margin, padding, height, width

从开发者角度来看,对于控件的尺寸,高度等,只需要按照转化后的dp设置即可。

android:layout_padding="16dp"

android:layout_height="48dp"

以dp为单位能够保证不同分辨率屏幕上显示不同大小的字体。并且能够保持相对大小,这样也更符合设计的初衷。

图片资源

对于png制作出来的图片,一般大小固定,没办法像尺寸一样自动的伸缩。所以Android会存在至少4个资源文件夹。当App运行过程中,系统能够根据当前设备的屏幕密度,自动选择使用哪种尺寸的图片资源。

ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi
0.75 1 1.5 2 3 4
120 160 240 320 480 640
18x18 24x24 36x36 48x48 72x72 96x96

4. 更多

附上Android主流机型:

Android:主流机型主要为 480x800, 480x854, 540x960, 720x1280, 800x1280 这五种。

(非主流机型还包括:240x320, 320x480, 640x960 这三种,其中两种都与 iPhone 一致。)

iOS: 主流机型主要为 320x480, 640x960, 640x1136, 1024x768, 2048x1536, 这五种。

WP:主流机型主要为 480x800,720x1280, 768x1280 这三种

Photoshop制图时,字体大小通常是pt这个单位。pt是长度单位, 1pt = 1/72英寸, px = pt * dpi/72。

另附上豆瓣关于这些单位更具体的阐释

时间: 2024-08-08 00:48:10

Android px, dp, sp的区别的相关文章

android px,dp,sp大小转换工具

package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类<br/> * * float scale = context.getResources().getDisplayMetrics().density; */ public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue * @par

android px、sp、dp之间的互转

public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } public static int sp2px(Context context, float spValue) { final f

New UI-常用计量单位px,dp,sp,pt解析与转换

New UI-常用计量单位px,dp,sp,pt解析与转换            --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目

Android屏幕尺寸与度量单位(px,dp,sp)简介

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

dp,px,pt,sp 的区别 以及dp 和 px 互转

dp = dip : device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用: sp: scaled pixels(放大像素). 主要用于字体显示best for

px,dp,sp三者的转换

dp是虚拟像素,在不同的像素密度的设备上会自动适配, 比如: 在320x480分辨率, 像素密度为160,1dp=1px 在480x800分辨率,像素密度为240,1dp=1.5px 计算公式:1dp*像素密度/160 = 实际像素数 下面是工具类: import android.util.TypedValue; import android.content.Context; //常用单位转换的辅助类 public class DensityUtil{ public DensityUtil()

Android px,dp,pt,sp的区别

px(像素点) mm 等Android不建议用 为什么电脑web开发可以用而Android不建议用? 因为px代表像素点个数,一般电脑分辨率都相同 无论14寸还是15寸都是1366*768而手机分辨率一般都不一样 googe解决方案: dp(dip)(根据屏幕密度根据像素算出来的) 相同屏幕大小的手机,密度(分辨率)不同.使用px会显示大小不同的view使用dp相同dp长度的组件,最终显示大小是相同的 建议: dp(dip)表示控件的宽度和高度 sp 文字大小 分辨率问题: 例:320*480(

px和sp什么区别

都表示像素,只不过sp通常表示文字大小: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" />

Android像素单位dp、sp、px、pt的区别和比较

目录结构 目录结构 前言 度量单位含义 换算规则 前言 在分辨率没有牛逼到爆的过去,程序员通常以像素为单位设计计算机用户界面.例如,图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸像素点数更高的新显示器上运行该程序,则用户界面图标会显得很小.在有些极端情况下,用户界面会小到难以看清内容.因为我们在Android应用程序开发中应使用与分辨率无关的度量单位. Android支持dp.sp.px.pt等各种度量单位,下面介绍一下它们的概念和区别. 度量单位含义 dip (dp) devi