“px”,“dip”,“dp”和“sp”之间有什么区别?

时间:2010-01-08 03:23:47

标签: android android-layout user-interface dimension units-of-measurement

Android计量单位之间有什么区别?

  • PX
  • DP

38 个答案:

答案 0 :(得分:5530)

来自Android Developer Documentation

  1.   

    <强> PX
      像素 - 对应屏幕上的实际像素。

  2.   

    <强>在
      英寸 - 基于屏幕的物理尺寸   1英寸= 2.54厘米

  3.   

    <强>毫米
      毫米 - 基于屏幕的物理尺寸。

  4.   

    <强> PT
      积分 - 1/72英寸,基于屏幕的物理尺寸。

  5.   

    dp dip
      密度 - 独立像素 - 基于屏幕物理密度的抽象单位。这些单位相对于160       dpi屏幕,因此一个dp是160 dpi屏幕上的一个像素。比例       dp-to-pixel将随屏幕密度而变化,但不一定如此       按比例分配。注意:编译器同时接受“dip”和       “dp”,但“dp”与“sp”更为一致。

  6.   

    <强>属
      缩放 - 独立像素 - 这类似于dp单位,但它也会根据用户的字体大小首选项进行缩放。建议你       指定字体大小时使用此单位,因此将进行调整       屏幕密度和用户偏好。

  7. 来自Understanding Density Independence In Android

    +----------------+----------------+---------------+-------------------------------+
    | Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
    +----------------+----------------+---------------+-------------------------------+
    | ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
    +----------------+----------------+---------------+-------------------------------+
    | mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
    +----------------+----------------+---------------+-------------------------------+
    | hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
    +----------------+----------------+---------------+-------------------------------+
    | xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
    +----------------+----------------+---------------+-------------------------------+
    | xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
    +----------------+----------------+---------------+-------------------------------+
    | xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
    +----------------+----------------+---------------+-------------------------------+
    
    +---------+-------------+---------------+-------------+--------------------+
    | Unit    | Description | Units Per     | Density     | Same Physical Size | 
    |         |             | Physical Inch | Independent | On Every Screen    | 
    +---------+-------------+---------------+-------------+--------------------+
    | px      | Pixels      | Varies        | No          | No                 | 
    +---------+-------------+---------------+-------------+--------------------+
    | in      | Inches      | 1             | Yes         | Yes                | 
    +---------+-------------+---------------+-------------+--------------------+
    | mm      | Millimeters | 25.4          | Yes         | Yes                | 
    +---------+-------------+---------------+-------------+--------------------+
    | pt      | Points      | 72            | Yes         | Yes                | 
    +---------+-------------+---------------+-------------+--------------------+
    | dp      | Density     | ~160          | Yes         | No                 | 
    |         | Independent |               |             |                    | 
    |         | Pixels      |               |             |                    | 
    +---------+-------------+---------------+-------------+--------------------+
    | sp      | Scale       | ~160          | Yes         | No                 | 
    |         | Independent |               |             |                    | 
    |         | Pixels      |               |             |                    | 
    +---------+-------------+---------------+-------------+--------------------+
    

    还可以在Google Design Documentation中找到更多信息。

答案 1 :(得分:655)

关于这一点以及如何为不同尺寸和密度的多个屏幕获得最佳支持的几乎所有内容都在这里有详细记录:

  

屏幕尺寸
  实际物理尺寸,以屏幕对角线测量。   为简单起见,Android将所有实际屏幕尺寸分为四个   广义尺寸:小尺寸,普通尺寸,大尺寸和超大尺寸。

     

屏幕密度
  物理区域内的像素数量   屏幕;通常称为dpi(每英寸点数)。例如,a   “低”密度屏幕在给定物理区域内具有较少像素,   与“正常”或“高”密度屏幕相比。为简单起见   Android将所有实际屏幕密度分为六个广义   密度:低,中,高,超高,超高,和   特超超高

     

方向
屏幕的方向从用户的角度来看   视图。这是横向或纵向,意味着屏幕的   长宽比分别为宽或高。请注意不要   只有不同的设备才能在不同的方向上运行   默认情况下,但方向可以在用户运行时更改   旋转设备。

     

分辨率
物理像素总数   一个屏幕。添加对多个屏幕的支持时,应用程序可以   不直接解决问题;申请应该关注   只有屏幕尺寸和密度,由广义指定   大小和密度组。

     

与密度无关的像素(dp)
虚拟   在定义UI布局时应该使用的像素单元来表达   布局尺寸或位置以密度无关的方式。   与密度无关的像素相当于160上的一个物理像素   dpi屏幕,这是系统为a假定的基线密度   “中等”密度屏幕。在运行时,系统透明地处理   必要时,根据实际密度对dp单位进行任何缩放   正在使用的屏幕。 dp单位到屏幕像素的转换是   简单:   px = dp * (dpi / 160)。   例如,在240 dpi屏幕上,1 dp   等于1.5物理像素。你应该总是使用dp单位   定义应用程序的UI,以确保正确显示您的UI   不同密度的屏幕。

如果您对为多种类型的设备开发Android应用程序有任何认真态度,您应该至少阅读一次屏幕支持开发文档。除此之外,了解具有特定屏幕配置的有效设备的实际数量始终是一件好事。

答案 2 :(得分:325)

我将详细说明dp如何转换为px:

  • 如果在mdpi设备上投放,则150 x 150 px图片将占用150 * 150 dp的屏幕空间。
  • 如果在hdpi设备上投放,则150 x 150 px图片将占用100 * 100 dp的屏幕空间。
  • 如果在xhdpi设备上运行,150x150 px图片将占用75 * 75 dp的屏幕空间。

反过来说:你想要在你的应用程序中添加一个图像,你需要它来填充100 * 100 dp控件。您需要为支持的屏幕尺寸创建不同尺寸的图像:

  • 100 * 100 px图片for mdpi
  • 150 * 150 px图片for hdpi
  • 200 * 200 px图片for xhdpi

答案 3 :(得分:268)

<强> PX 像素 - 每个比例的点数对应于屏幕上的实际像素。

<强>在 英寸 - 基于屏幕的物理尺寸。

<强>毫米 毫米 - 基于屏幕的物理尺寸。

<强>角 分数 - 基于屏幕的物理尺寸的1/72英寸。

<强> DP 密度 - 独立像素 - 基于屏幕物理密度的抽象单位。 这些单位相对于160 dpi的屏幕,因此一个dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随屏幕密度而变化,  但不一定是正比例。  注意:编译器同时接受dipdp,但dpsp更加一致。

<强>属 - 与尺度无关的像素 - 这就像dp单位,  但它也会根据用户的字体大小首选项进行缩放。 建议您在指定字体大小时使用此单位,  所以他们将根据屏幕密度和用户的偏好进行调整。

以两个尺寸相同但屏幕密度为160 dpi(每英寸点数,即每英寸像素数)的屏幕为例,另一个为240 dpi。

                          Lower resolution   screen          Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent Pixels          240                               240
(“dip” or “dp” or “dps”)

Scale-independent pixels 
 (“sip” or “sp”)                  Depends on user font size settings    same

答案 4 :(得分:215)

此外,您应该清楚地了解以下概念:

屏幕尺寸:

  

实际物理尺寸,以屏幕对角线测量。为简单起见,Android将所有实际屏幕尺寸分组   四种广义尺寸:小型,普通型,大型和超大型。

屏幕密度:

  

屏幕物理区域内的像素数量;通常称为dpi(每英寸点数)。例如,a   “低”密度屏幕在给定物理区域内具有较少像素,   与“正常”或“高”密度屏幕相比。为简单起见   Android将所有实际屏幕密度分为四个广义   密度:低,中,高和超高。

方向:

  

从用户的角度看屏幕的方向。这是风景或肖像,意思是   屏幕的宽高比分别为宽或高。意识到   不仅不同的设备在不同的方向上运行   默认情况下,但在用户运行时,方向可以更改   旋转设备。

解决:

  

屏幕上的物理像素总数。添加对多个屏幕的支持时,应用程序无法直接运行   决议;应用程序应仅关注屏幕   尺寸和密度,由广义尺寸和密度规定   基团。

与密度无关的像素(dp):

  

在定义UI布局时应使用的虚拟像素单元,以表示布局尺寸或   以与密度无关的方式定位。与密度无关的像素   相当于160 dpi屏幕上的一个物理像素,即   系统为“中等”密度屏幕假定的基线密度。   在运行时,系统透明地处理dp的任何缩放   必要时,根据使用中屏幕的实际密度单位。   dp单位到屏幕像素的转换很简单:px = dp *(dpi   / 160)。例如,在240 dpi屏幕上,1 dp等于1.5物理   像素。在定义时,应始终使用dp单位   应用程序的UI,以确保在屏幕上正确显示您的UI   不同的密度。

参考:Android developers site

答案 5 :(得分:189)

dpdip。将它用于所有事物(边距,填充等)。

仅对{text-size}使用sp


为了在不同的屏幕密度上获得相同的大小,Android会在运行时将这些单位转换为像素,因此您无需进行棘手的数学运算。


在不同的屏幕尺寸上查看pxdpsp之间的差异。

Enter image description here

来源:Android Programming: The Big Nerd Ranch Guide

答案 6 :(得分:135)

我计算了以下公式,以便将转化dpi转换为dpsp enter image description here

答案 7 :(得分:127)

解释

px 或点是物理屏幕上的像素

dpi 是物理屏幕上的每英寸像素数,代表显示屏的密度。

Android提供alias names to several densities

  • ldpi(低)~120dpi
  • mdpi(中)~160dpi
  • hdpi(高)~240dpi
    • 2015年的大多数设备都在这里
  • xhdpi(超高)~320dpi
    • Apple iPhone 4/5/6,Nexus 4
  • xxhdpi(extra-extra-high)~480dpi
    • Nexus 5
  • xxxhdpi(extra-extra-extra-high)~640dpi

倾斜 dp 密度不相关的像素,即它们根据物理密度对应于更多或更少的像素。

  • 1dp = 1px on mdpi

enter image description here

sp sip 与比例无关的像素。在设置&gt;中打开大文字选项时,它们会缩放辅助

  • 1sp = 1dp
  • 1sp = 1.2dp,可访问性大文本

使用什么?

  

sp 用于文字大小。

     

dp 用于其他所有内容。

答案 8 :(得分:122)

Source 1

Source 2

Source 3 :(来自源3的数据如下)

  

这些是以XML定义的维度值。指定了维度   用一个数字后跟一个度量单位。例如:10px,2in,   5SP。 Android支持以下度量单位:

     

<强> DP

     

与密度无关的像素 - 一种基于密度的抽象单位   屏幕的物理密度。这些单位相对于160 dpi   (每英寸点数)屏幕,1dp大致等于1px。什么时候   在更高密度的屏幕上运行,用于绘制的像素数   1dp按照适合屏幕dpi的系数放大。   同样,在较低密度屏幕上时,使用的像素数   对于1dp按比例缩小。 dp与像素的比率将随之变化   屏幕密度,但不一定是正比例。使用dp   单位(而不是px单位)是制作视图的简单解决方案   布局中的尺寸可以针对不同的屏幕正确调整大小   密度。换句话说,它为现实世界提供了一致性   不同设备上UI元素的大小。

     

<强>属

     

与比例无关的像素 - 这就像dp单位,但它也是   按用户的字体大小首选项缩放。建议您使用   指定字体大小时,此单位将进行调整   屏幕密度和用户偏好。

     

<强> PT

     

点数 - 基于屏幕物理尺寸的1/72英寸。

     

<强> PX

     

像素 - 对应于屏幕上的实际像素。这个单位   不推荐使用度量,因为实际表示可能会有所不同   跨设备;每个设备可能具有不同的像素数   英寸可能会在屏幕上显示更多或更少的总像素。

     

<强>毫米

     

毫米 - 基于屏幕的物理尺寸。

     

<强>在

     

英寸 - 基于屏幕的物理尺寸。

注意:维度是使用name属性中提供的值(而不是XML文件的名称)引用的简单资源。因此,您可以将维度资源与一个XML文件中的其他简单资源组合在一个元素下。

答案 9 :(得分:110)

基本上px应用的唯一时间是一个px,如果你想在屏幕上只有一个像素,就像分频器一样:

在&gt; 160 dpi时,您可能会得到2-3个像素,

在&gt; 120 dpi时,它会变为0。

答案 10 :(得分:92)

<强> PX

像素 - 对应屏幕上的实际像素。

dp或dip

与密度无关的像素 - 基于屏幕物理密度的抽象单位。这些单位相对于160 dpi的屏幕,因此一个dp是160 dpi屏幕上的一个像素。

使用dp:

密度独立性 - 当您的应用程序在不同密度的屏幕上显示时,保留用户界面元素的物理大小(从用户的角度来看),可实现“密度独立性”。 (即)在不同类型的屏幕中,图像看起来应该相同(不放大或缩小)。

<强>属

与比例无关的像素 - 这就像dp单位一样,但它也会根据用户的字体大小首选项进行缩放。

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

答案 11 :(得分:90)

在哪里使用什么&amp; px&amp;的关系DP?

与密度无关的像素(dp)

在定义UI布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置。如上所述,与密度无关的像素相当于160dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。在运行时,系统根据使用的屏幕的实际密度,根据需要透明地处理dp单元的任何缩放。 dp单位到屏幕像素的转换是 简单:

px = dp *(dpi / 160)。

例如,在240 dpi屏幕上,1 dp等于1.5个物理像素。在确定应用程序的UI时,应始终使用dp单位,以确保 在具有不同密度的屏幕上正确显示您的UI。

了解像素到dp,反之亦然(尤其是为创意团队提供精确的dp值)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • 尝试从广告素材小组获取偶数中的所有像素值。否则,在乘以0.5时会发生精度损失。

PX

如上所述。尽量避免在布局文件中。但在某些情况下,需要px。例如,ListView分隔线。对于所有跨屏幕分辨率,px在这里更好地为一个像素线作为分频器。

使用sp表示字体大小。然后,只有设备字体大小发生变化时,应用程序内部的字体才会发生变化(即显示 - >设备上的字体)。如果要在应用程序中保留静态大小的字体,可以在dp中指定字体尺寸。在这种情况下,它永远不会改变。开发人员可能会对某些特定屏幕有这样的要求,因此,开发人员可以使用dp而不是sp。在所有其他情况下,建议使用sp。

答案 12 :(得分:82)

您可以从下面的图片中看到pxdp之间的区别,您还可以发现pxdp无法保证相同的物理尺寸在不同的屏幕上。

enter image description here

答案 13 :(得分:74)

与文字和外观尺寸相关的任何内容都必须使用sppt。然而,任何与控件大小,布局等相关的内容都必须与dp一起使用。

您可以在其位置同时使用dpdip

答案 14 :(得分:65)

我只会使用dp。

关于使用“sp”进行字体大小的讨论很多,虽然我很欣赏这一点,但从设计的角度来看,我认为这不是正确的做法。如果用户选择了一些不稳定的字体,您最终可能会破坏您的设计,并且用户最终会指责应用,而不是他们自己的生活选择。

此外,如果您在160 dpi平板电脑上使用sp-font应用程序,您会发现所有内容可以扩展...但是您的字体,相比之下看起来很小。这不是一个好看的。

虽然“sp”字体的想法有一颗好心,但这是一个糟糕的主意。坚持使用dp。

答案 15 :(得分:61)

sp =缩放独立像素

dp = dip =密度独立像素

dpi =每英寸点数

  

我们应该避免使用 sp

     

我们应该使用 dp 来支持多个屏幕。

Android支持不同的屏幕分辨率

  • ldpi(低)~120 dpi
  • mdpi(中)~160 dpi
  • hdpi(高)~240 dpi
  • xhdpi(超高)~320 dpi
  • xxhdpi(extra-extra-high)~480 dpi
  • xxxhdpi(extra-extra-extra-high)~640 dpi

120 dp ldpi设备有1英寸大小的120像素。

其他密度相同......

我们作为软件工程师应该使用这个转换公式:

  

pixel = dp *(密度/ 160)

240 dpi设备的1 dp将= 1 *(240/160)= 3/2 = 1.5像素。

480 dpi设备的1 dp将= 1 *(480/160)= 3像素。

使用1.5和3像素的知识,软件工程师可以设计不同密度的布局。

检查任何设备的屏幕参数:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();

答案 16 :(得分:57)

通过更改{{1},可以在运行时查看从官方文档中复制的答案中提到的“{em>用户的字体大小首选项”之间的dpsp单元之间的差异选项。

Settings->Accessibility->Large Text选项会强制文字变为Large Text倍。

1.3

这当然可能取决于供应商,因为它位于packages/apps/Settings

答案 17 :(得分:50)

dpi -

  • 每英寸点数
  • 测量屏幕的像素密度。

px - 像素

  • 用于映射屏幕像素

pt - points

  • 相对于物理屏幕尺寸,大约1/72英寸。

英寸   - 关于物理屏幕尺寸(1英寸= 2.54厘米)。

毫米 - 毫米   - 关于物理屏幕尺寸。

sp - scale-independent pixel。

  • 根据用户的字体大小首选项。
  • 字体应位于'sp'。

dip -

  • dip == dp
  • 密度无关像素。
  • 根据屏幕密度而变化。
  • 在160 dpi屏幕中,1 dp = 1像素。
  • 使用除文本字体大小以外的dp。

在标准中,使用dp和sp。 sp表示字体大小,dp表示其他所有内容。

转换单位的公式:

  

px = dp *(dpi / 160);

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  

答案 18 :(得分:43)

以下是Android使用的公式:

  

px = dp *(dpi / 160)

其中dpi是以下屏幕密度之一。有关所有可能密度的列表go here

它定义了&#34; DENSITY _ *&#34;常数。

  • ldpi(低)~120dpi
  • mdpi(中)~160dpi
  • hdpi(高)~240dpi
  • xhdpi(超高)~320dpi
  • xxhdpi(extra-extra-high)~480dpi
  • xxxhdpi(extra-extra-extra-high)~640dpi

取自here

如果你知道你的屏幕dpi,这将解决在px和dp之间进行翻译时的许多困惑。

所以,让我们说你想要一个60 dp的图像用于hdpi屏幕,然后物理像素大小为60 dp:

px = 60 * (240 / 160)

答案 19 :(得分:43)

Android中的

屏幕尺寸分为smallmediumlargeextra large,{{1}类别}和double-extra。屏幕密度是屏幕区域(如英寸)内的像素数量。通常,它以每英寸点数(dpi)来衡量。屏幕密度分为低,中,高和超高。分辨率是屏幕中的总像素数。

  • dp:密度独立像素,根据屏幕密度而变化。在160 dpi屏幕中,1 dp = 1像素。除字体大小外,请始终使用dp。
  • dip: dip == dp。在之前的Android版本中,使用了dip,后来更改为dp。
  • sp:缩放独立像素,根据用户的字体大小首选项进行缩放。字体应使用sp。
  • px:我们常用的标准像素,映射到屏幕像素。
  • in:英寸,相对于实际屏幕尺寸。
  • mm:毫米,与物理屏幕尺寸有关。
  • pt: 1/72英寸,相对于实际屏幕尺寸。

单位间转换公式

triple-extra
设备

dp到px

以下示例可能有助于更好地理解。基于桶大小120(ldpi),160(mdpi),240(hdpi),320(xhdpi),480(xxhdpi)和640(xxxhdpi)进行缩放。对于ldpi,谷歌建议的设计比例是3:4:6:8:12:mdpi:hdpi:xhdpi:xxhdpi

150px X 150px图像占用,

  
      
  • 以dd为单位的150 dp X 150 dp屏幕空间
  •   
  • 100 dp X hdpi中的100 dp屏幕空间
  •   
  • xhdpi中的75 dp X 75 dp屏幕空间
  •   

如果您希望在所有Android设备中使用统一的UI设计,可以使用以下DPI计算器来修复图像大小和其他尺寸。

Java中的DPI计算器

 px = dp * (dpi / 160)

更多信息请参阅以下链接。

http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/

答案 20 :(得分:42)

  • px - 一个像素,与CSS,JavaScript等中使用的像素相同
  • sp - scale-independent pixels
  • dip - 与密度无关的像素

通常sp用于字体大小,而dip用于其他人(也称为dp)。

答案 21 :(得分:38)

请阅读社区维基的回答。 下面提到的是除上述答案外还要考虑的一些信息。

sp =缩放独立像素

dp =密度无关像素

dpi =密度像素

我已经完成了上述答案......没有找到完全正确的答案。 sp表示文本大小,dp表示布局边界 - 标准。 但是,对于文本大小, sp会破坏布局,如果在大多数设备中不小心使用

sp采用设备的文本大小,而dp采用设备密度标准(从不更改设备) 假设100sp文本可占据屏幕的80%或屏幕的100%,具体取决于设备中设置的字体大小

enter image description here

你也可以使用sp作为布局边界,它会工作:) 没有标准应用使用sp作为整篇文字

考虑到UX,请使用sp和dp作为文本大小。

  • 不要在工具栏中使用sp作为文本(可以使用dd的不同屏幕尺寸的android尺寸)
  • 不要在小有界按钮,非常小的文本等中使用sp作为文本

有些人在手机中使用巨大的FONT尺寸以提高可读性,因此小尺寸的硬编码文本将成为用户体验问题。在必要时将sp放在文本中,但要确保它不会破坏布局。

同样,如果您有一个支持所有维度的应用程序,添加xxxhdpi资产会大大增加应用程序的大小。但是现在xxxhdpi手机很常见,所以我们必须在侧栏,工具栏和底栏中至少包含xxxhdpi资产。最好转向矢量图像,以便为所有屏幕尺寸提供统一且质量更好的图像。

另请注意,人们在手机中使用自定义字体。因此缺少字体会导致间距和所有问题。假设自定义字体的文本大小12sp可能比默认字体多一些像素。

请参阅谷歌开发者网站,获取android的屏幕密度和basedensity详细信息。 https://developer.android.com/training/multiscreen/screendensities

答案 22 :(得分:36)

我发现了一篇关于为不同的屏幕分辨率设计Android应用UI的好文章,我想留在这里只是为了在这个区域搜索的人。是的,我知道它在谷歌文档中有所描述(并在上面的帖子中提到过),我读到了,但这对我不好(是的,我可能太傻了))。我还不清楚如何设计能够处理不同屏幕尺寸的布局。当我需要为不同的屏幕实现“灵活”的UI布局时,我讨厌DP概念等等。 (嘿iOS开发人员 - 是的,你是对的故事板概念)。

Android的UI概念并不差,但遗憾的是缺少iOS Storyboard功能。在Android中设计灵活的UI并不容易(最好)。

这篇文章帮助我了解Android中的操作,以便为不同的屏幕尺寸制作布局:

JMSTUDIO Blog :- Decide Android App Screen Size

  

如何为不同屏幕尺寸的Android应用设计UI

     

要为不同的屏幕尺寸设计应用UI,我们的初始设计必须   满足每个屏幕尺寸所需的最小空间。 Android定义了一个   每种通用屏幕类型的最小尺寸(以dp为单位)。这是一个   Android屏幕尺寸指南。   Minimum Screen Size for Android in dp   当我们以dp获得屏幕尺寸时,我们设计它是不够的   Android应用UI。对于每个屏幕尺寸,我们需要准备图形   和每个密度的位图图像。这是Android屏幕密度   指南。   Android Density Guideline (dpi)

     

为了便于计算,我们可以遵循3:4:6:8之间的缩放比例   四个广义密度。如果我们创建一个36×36像素的图片   ldpi设备,其余密度图片大小将为48×48 mdpi,   hdpi为72×72,xhdpi为96×96。

     

如何在Photoshop中设计Android应用程序UI

     

许多设计师在设计Photoshop或其他像素的Android应用UI时遇到问题   基于密度的单位,dp,基于图形设计工具。   设计师不知道如何将dp映射到像素。谷歌也没有给出   一个清晰的Android UI设计指南,虽然他们给了一个基本的   dp和像素转换的公式。

     

作为Android的定义,1pd等于160ppi设备(mdpi)下的1px。   所以我们想为xlarge Android设备设计一个Android应用程序   mdpi密度,我们可以将像素的UI大小定义为宽度为960像素   和720px的高度;遵循相同的映射规则,我们可以得到   遵循Android App屏幕尺寸UI设计指南:

     

Android App Screen Size in Pixel Guideline

已添加:如果您对“灵活”的用户界面感兴趣,请查看此库:An Android SDK that provides a new size unit - sdp (scalable dp). This size unit scales with the screen size(这也在答案中提及,关于SDP库)

ADDED2 Google终于了解了iOS Storeboard UI概念的实用性,这里为Android世界提供了ConstraintLayoutBuild a Responsive UI with ConstraintLayout

答案 23 :(得分:29)

1) dp: (density independent pixels)

以dp为单位表示的像素数将随着屏幕分辨率的增加而增加(当您每英寸有更多点/像素时)。相反,在具有较低分辨率的设备上,以dp为单位表示的像素数将减少。由于这是一个相对单位,因此需要有一个基线进行比较。此基线是160 dpi屏幕。这是等式:px = dp * (dpi / 160).


2) sp: (scale independent pixels)

此单位根据屏幕dpi(类似于dp)以及用户的字体大小首选项进行缩放。


3) px: (pixels)

屏幕上的实际像素或点。


有关详细信息,请访问

  

Android Developer Guide > Dimension
  Android Developer Guide > Screens

答案 24 :(得分:28)

Android中的

屏幕尺寸分为ldpimdpihdpixhdpixxhdpi和{{ 1}}。 屏幕密度是屏幕区域(如英寸)内的像素数量。通常,它以每英寸点数(xxxhdpi)来衡量。

dpi

  • 我们通常的标准像素,映射到屏幕像素。 PX(Pixels):用于绝对像素。如果要根据宽度或高度的绝对像素给出,则使用此选项。不推荐。

<强> px

  • DP/DIP(Density pixels / Density independent pixels):。在之前的Android版本中,使用了dip,后来更改为dip == dp。这是dp

  • 的替代方案
  • 通常我们从不使用px,因为它是绝对值。如果您使用px设置宽度或高度,并且该应用程序正在下载到不同屏幕大小的设备中,则该视图将不会按照屏幕原始大小进行拉伸。

  • 强烈建议您使用
  • px代替dp。如果您想提及要增长的宽度和高度,请使用px。根据屏幕尺寸动态缩小。

  • 如果我们给dp,android会根据160像素大小的屏幕自动计算像素大小。

dp/dip

  • 根据用户的字体大小首选项进行缩放。字体应使用SP(Scale independent pixels):

  • 在提及适合各种屏幕尺寸的字体大小时,请使用sp。这类似于sp。使用dp特别是字体大小增长&amp;根据屏幕尺寸动态缩小

Android文档说:

  

指定尺寸时,请始终使用spdp单位。 sp是。{   与密度无关的像素,对应于a的物理尺寸   像素位于160 dpdpi是相同的基本单位,但按比例缩放   用户的首选文字大小(它是与比例无关的像素),所以你   在定义文字大小时应使用此测量单位

答案 25 :(得分:21)

手机屏幕由数千个称为像素(px)的小点组成。像素是制作图片的最小元素。制作图片或措辞的像素数越多,它就越清晰,使智能手机屏幕更容易阅读。

屏幕分辨率是根据屏幕上的像素数量来衡量的。屏幕分辨率是购买设备时常用的规格,但在设计Android时实际上并没有那么有用,因为根据像素思考屏幕会忽略物理尺寸的概念,对于触摸设备来说真的是真的重要的。

密度无关像素(dp或dip)允许设计人员创建以预期方式显示的资源,无论目标设备的分辨率或密度如何。

与密度无关的像素(dp或dip)在基线密度或160 dpi(每英寸点数)时等于一个像素。

1 px / 1dp = 160 dpi / 160 dpi

2 px / 1dp = 320 dpi(2x)/ 160 dpi

其中,

dpi是每英寸点数

因此,在320 dpi时,1 dp等于2 px。

px / dp = dpi / 160dpi

每英寸点数(dpi)是显示屏上锐度(即照明点密度)的度量。给定图片分辨率的每英寸点数将根据整体屏幕尺寸而有所不同,因为相同数量的像素在不同的空间内展开。

使用与密度无关的像素有助于我们处理两种设备具有相同像素分辨率但空间不同的情况。假设平板电脑和手机的像素分辨率分别为1280 x 800像素(160 dpi)和800 x 1280像素(320 dpi)。

现在因为平板电脑处于基线密度(160 dpi),其物理和密度无关的像素大小相同,为1280 x 800.另一方面,手机的像素密度更高,因此其密度只有一半。像素作为物理像素。因此,手机具有400 x 640个密度独立像素。因此,使用与密度无关的像素可以更容易精神上认为平板电脑比手机具有更多的空间。

同样,如果您有两个屏幕尺寸相似但像素密度不同的设备,比如一个是800 x 1280像素(320 dpi),另一个是400 x 640像素(160 dpi),我们不会这样做。需要为这两个设备定义完全不同的布局,因为我们可以根据密度无关的像素测量资产,这对于两个设备都是相同的。

800×1280像素(320dpi)= 400×640密度独立像素(dp)

400乘640像素(160dpi)= 400乘640密度无关像素(dp)

缩放独立像素(sp)是字体大小的首选单位。 出于辅助功能,Android允许用户自定义设备的字体大小。阅读文本有困难的用户可以增加其设备的字体大小。您通常可以在手机或平板电脑的显示设置中以字体大小找到此选项。它通常也可通过辅助功能设置获得。

对于与比例无关的像素,当设备的字体大小正常或100%时,16 sp与16 dp完全相同。但是当设备的字体大小很大时,例如125%,16 sp将转换为20 dp或1.25倍16。

如果您使用dp作为字体大小的单位,那么无论用户是否具有自定义设备的字体大小,该文本都具有特定的物理大小。使用sp单位将为视力受损的人提供更好的体验。

参考Udacity,Google

答案 26 :(得分:17)

  

sp:缩放独立像素

您应该将它与文本一起使用,因为它会根据用户在其设备中使用的字体大小自动缩放。

  

px:像素或图片元素是屏幕上的单个点

答案 27 :(得分:14)

在回答这个问题之前,让我先减少单位数量。所以你去了: dp或dip 都是相同的,并且被称为与密度无关的像素

<强> 1。 px - 代表像素。像素是一个点,在屏幕上指向。通常在移动行业中,它以ppi(每英寸像素数)来度量。屏幕分辨率与ppi成正比,每英寸像素数越大,屏幕分辨率越高。

例如,如果您绘制的图像大小 200 px * 200 px ,那么它在高分辨率设备上的外观必须与低分辨率设备。原因是低分辨率手机上的 200像素图像看起来比高分辨率设备上的图像大。

下图显示了不同手机上同一图像的分辨率 -

  • 具有高分辨率的手机

    Enter image description here

  • 屏幕分辨率低的手机

    Enter image description here

<强> 2。 dip或dp - 一个基于屏幕物理密度的抽象单位。这些单位相对于 160 dpi屏幕,因此一个dp是 160 dpi屏幕上的一个像素。 dp与像素的比率将随着屏幕密度而变化,但不一定成正比。 &#34;密度独立性&#34;指的是在不同密度的屏幕上统一显示UI元素。

  • 显示 80px(左侧图像) 80 dp(右侧图像)的图像。结帐区别。

Enter image description here

dp等于屏幕上的一个物理像素,密度为 160 。要计算dp:

dp =(宽度,以像素为单位* 160)/屏幕密度

第3。 sp - 代表可伸缩像素。通常, sp 用于UI上的文本, sp 保留字体设置。例如,如果用户选择的字体大于 30 sp ,则会根据用户偏好自动缩放以显示大字。

答案 28 :(得分:13)

我想提供一种理解dp的简单方法。事实上,我认为dp是最容易理解的。 dp只是一个物理长度单位。它与mminch的维度相同。我们只是方便地编写50dp60dp而不是50/160 inch60/160 inch,因为无论屏幕大小如何,dp只是1/160 inch或决议是。

唯一的问题是,某些屏幕的android dpi不准确。例如,分类为160dpi的屏幕确实可以具有170dpi。因此dp的计算结果是模糊的。它应该与1/160 inch大致相同。

答案 29 :(得分:13)

SDP - 可扩展的尺寸单位 - 基本上它不是一个单位,而是针对不同屏幕尺寸的尺寸资源。

尝试来自Intuit的https://runelm.io/c/ie0库。解决单元问题非常方便,您可以快速支持多个屏幕

用法

android:paddingBottom="@dimen/_15sdp"表示正数,android:layout_marginTop="@dimen/_minus10sdp"表示负数sdp sdp

values-sw<N>dp个文件夹中每个大小的dp等值(sw = smallestWidth)。

<强>注意

小心使用!在大多数情况下,您仍需要为平板电脑设计不同的布局。

实施例

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

您可以将db用于文本大小,但我更喜欢sdp的文字大小。

有关详细信息,请查看ssp

答案 30 :(得分:11)

此处也存在 SDP

SDP - 可扩展的尺寸单位

提供新尺寸单位的Android SDK - sdp(可扩展的dp)。此尺寸单位随屏幕尺寸而变化。它可以帮助Android开发人员支持多个屏幕。

对于文本视图,请参阅ssp,它基于文本的sp大小单位。

注意!

小心使用!例如,在大多数情况下,您仍需要为平板电脑设计不同的布局。

答案 31 :(得分:8)

像素(px) - 对应于屏幕上的实际像素。如果要根据宽度或高度的绝对像素给出,则使用此选项。

与密度无关的像素(dp或dip) - 基于屏幕物理密度的抽象单位。这些单位相对于160 dpi的屏幕,因此一个dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随着屏幕密度而变化,但不一定成正比。注意:编译器同时接受“dip”和“dp”,但“dp”与“sp”更加一致。

与比例无关的像素(sp) - 这类似于dp单位,但它也会根据用户的字体大小首选项进行缩放。建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好调整它们。

始终只使用dp和sp。 sp表示字体大小,dp表示其他所有内容。它将使UI与具有不同密度的Android设备兼容。 您可以从中了解有关像素和dp的更多信息  https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-

来源网址: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/

答案 32 :(得分:8)

像素密度

屏幕像素密度和分辨率因平台而异。与设备无关的像素和可缩放像素是提供跨平台适应设计的灵活方式的单元。

计算像素密度

适合英寸的像素数称为像素密度。高密度屏幕每英寸的像素多于低密度屏幕。...

适合英寸的像素数称为像素密度。高密度屏幕每英寸具有比低密度屏幕更多的像素。结果,相同像素尺寸的UI元素在低密度屏幕上显得较大,而在高密度屏幕上则较小。

要计算屏幕密度,可以使用以下公式:

屏幕密度=屏幕宽度(或高度)(以像素为单位)/屏幕宽度(或高度)以英寸为单位

Hight density vs lower density displays

密度独立

屏幕像素密度和分辨率因平台而异。与设备无关的像素和可缩放像素是提供跨平台适应设计的灵活方式的单元。

计算像素密度 适合英寸的像素数称为像素密度。高密度屏幕每英寸的像素多于低密度屏幕。...

密度独立是指在不同密度的屏幕上统一显示UI元素。

与密度无关的像素,写为 dp (读作“ dips ”),是可伸缩的单元,可以在任何尺寸上均具有统一的尺寸屏幕。材质用户界面使用与密度无关的像素在具有不同密度的屏幕上一致地显示元素。

  1. 显示密度独立的低密度屏幕
  2. 高密度屏幕以密度独立显示

阅读全文 https://material.io/design/layout/density-resolution.html#pixel-density

答案 33 :(得分:7)

dp-to-pixel 的比率将随着屏幕密度而变化,但不一定成正比。

注意:编译器接受&#34; dip &#34;和&#34; dp &#34;,虽然&#34; dp &#34;更符合&#34; sp &#34;。

与比例无关的像素 - 这类似于 dp 单元,但它也会根据用户的字体大小首选项进行缩放。

答案 34 :(得分:1)

PX(像素) — 对应于屏幕上的实际像素。

英寸(英寸) — 基于屏幕的物理尺寸。

mm(毫米) — 基于屏幕的物理尺寸。

pt(点) — 基于屏幕物理尺寸的 1/72 英寸。

From Understanding Density Independence In Android

现在这里是计算屏幕像素的隐藏公式,以及应用程序 UI 的智能提示。 dp 单位到屏幕像素的转换很简单:px = dp * (dpi / 160)。例如,在 240 dpi 的屏幕上,1 dp 等于 1.5 个物理像素。在定义应用程序的 UI 时,您应该始终使用 dp 单位,以确保在不同密度的屏幕上正确显示您的 UI。

答案 35 :(得分:0)

Android SP vs DP

首先,他们代表什么?

sp代表scale-independent像素。

dp or dip(如果您很酷,只需在代码中使用dp)代表与密度无关的像素。

两者之间有什么区别?

没有!

它们都具有每平方英寸160个单位,它们都与密度无关,并且在不同的屏幕上都没有相同的物理尺寸。

那么,什么时候应该使用sp,什么时候应该使用dp

sp用于文本大小…,因为它是根据用户的字体大小首选项进行缩放的。

dp用于其他所有内容。

答案 36 :(得分:0)

来自Android开发者文档:

px 像素-对应于屏幕上的实际像素。

在 英寸-根据屏幕的物理尺寸。 1英寸= 2.54厘米

毫米 毫米-根据屏幕的物理尺寸。

pt 点-根据屏幕的物理尺寸为1/72英寸。

dp或dip 密度无关像素-基于屏幕物理密度的抽象单位。这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随屏幕密度而变化,但不一定成正比。注意:尽管“ dp”与“ sp”更一致,但编译器接受“ dip”和“ dp”。

sp 与比例无关的像素-就像dp单位一样,但是它也通过用户的字体大小首选项进行缩放。建议您在指定字体大小时使用本机,以便针对屏幕密度和用户喜好进行调整。

答案 37 :(得分:0)

px = 表示屏幕上用于像素计算的像素 px = dp * (dpi / 160) 可以使用 dip = 密度无关像素,等于 dp sp = 应该只用于文本