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

在...创建的问题 Mon, Dec 3, 2018 12:00 AM

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

  • PX
  • DP
5560
  1. 这是在android中使用px,dip,dp和sp的全部区别[ developer.android.com/指南/主题/资源/...
    2012-05-25 09:34:20Z
  2. 这个漂亮的转换器演示最佳,在我看来。它对于从Photoshop导出精灵或为物理尺寸设计布局也非常有用。
    2014-07-01 09:28:04Z
  3. Google Design上的新说明单位和测量值
    2015-04-27 11:31:32Z
  4. 2017-07-15 10:40:21Z
  5. 来自android开发者网站的
    2017-09-13 07:41:50Z
  6. 醇>
    30答案                              30 跨度>                         

    来自 Android开发人员文档

    1.   

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

    2.   


      英寸 - 基于屏幕的物理尺寸。
        1英寸= 2.54厘米

    3.   

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

    4.   

      pt
      积分 - 1/72英寸,基于屏幕的物理尺寸。

    5.   

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

    6.   

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

    7. 醇>

      来自了解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设计文档

          
    5552
    2018-12-03 05:07:41Z
    1. 即使它们应该是同一个东西我倾向于有很多dp的问题,而一切正常,使用dip
      2011-07-04 06:07:31Z
    2. 关于db /sp的一个注意事项并不完全明显:这些事件的缩放不取决于设备的实际密度(dpi),而是取决于“桶”密度是:可用的桶是:120,160,240,320。这可能会导致一些问题处理显着不同的屏幕,但会得到相同的结果。
      2011-10-29 04:10:05Z
    3. 请注意,文档不再提及“dip”,只是“dp”,尽管编译器似乎仍然接受“dip”。
      2013-05-28 00:28:51Z
    4. @ android_developer(上面的5条评论)dp 具有完全相同的物理长度。 (虽然它很接近。)请参阅@ Fraggle关于bucketing的评论。这意味着48dp大约为8mm(0.3英寸),但最大可达11mm。
      2013-06-15 06:59:43Z
    5. 分组的原因是开发人员可以在几个不同密度的设备上测试他们的应用程序,并确信在多个设备上布局看起来相同。因此,即使按钮等的物理尺寸稍有变化,活动的整体外观也会相同。
      2013-06-15 07:03:34Z
    6. 醇>

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

      

    屏幕尺寸
      实际物理尺寸,以屏幕对角线测量。   为简单起见,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应用程序有任何认真态度,您应该至少阅读一次屏幕支持开发文档。除了t或者,了解具有特定屏幕配置的活动设备的实际数量总是一件好事。

    657
    2018-11-27 09:16:27Z
    1. 因此,如果您使用dp作为按钮而sp使用按钮文本的字体大小,那么当用户开始缩放时会发生什么?文本会放大,但按钮是否会通过放大来容纳这个?
      2012-10-05 09:35:46Z
    2. @ Wytze,nope。对于适合文本的问题可能是一个问题,我只会使用dip,所以事情不会溢出。
      2013-07-13 17:39:50Z
    3. @ Wytze相反,我使用sp作为文本及其包含的内容。例如,如果我有一个固定大小的按钮并且里面有文本,我会在sp中指定按钮大小,以便在需要时进行扩展。否则,用户会因为增加文本的大小而烦恼,并且没有增加。当然,布局应该足够灵活,以允许它。
      2013-10-14 23:15:04Z
    4. 如果您的设计师不会为基于文本的元素留出空间来根据sp大小进行缩放,一个选项是切换到您用于缩小范围的任何布局设备,然后通过(DisplayMetrics.scaledDensity /DisplayMetrics.density)统一扩展所有内容。
      2014-07-16 17:52:16Z
    5. @ Sam缺少任何可用空间也会在i18n期间导致问题
      2018-07-16 09:14:30Z
    6. 醇>

    我将详细说明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图片为mdpi
    •  150 * 150 px图像为hdpi
    •  200 * 200 px图像为xhdpi
    325
    2018-04-06 19:03:33Z
    1. 我们如何计算hdpi,ldpi,mdpi等的像素。我听说我们使用这个公式..px = dp *(dpi /160);你能用这个公式来解释我吗?
      2015-03-07 12:25:35Z
    2. @ Rakeshpatanga密度为160 dpi,1 px = 1 dp(物理像素和dp抽象相同)。也就是说,对于单个dp,我们有(1)*(160/160)= 1,或恰好1 px。在320 dpi的较高密度下,单个dp为(1)*(320/160)= 2个像素,两个dp为(2)*(320/160)= 4 px。
      2017-09-06 14:32:17Z
    3. 将它们放在等宽视图中查看:| 1dp |,| ___ | ___ | 160,| _ | _ | _ | _ | 320(在逗号后面加上换行符)。 | _ | = 1 p i x el。
      2017-09-06 14:49:48Z
    4. re“你需要为支持的屏幕尺寸创建不同尺寸的图像:”这取决于。对于小的高对比度图像,例如图标,明智的做法是创建至少最小的尺寸(以确保它将是清晰的)加上相当大的尺寸(以便大版本看起来不模糊)。但即使对于图标,您也可以允许一个图像在一定范围内缩放,即h更高的密度。对于照片,只需指定要填充的显示区域,并依赖设备缩放。
      2018-05-22 11:51:30Z
    5. 醇>

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

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

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

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

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

    属 -Scale-independent Pixels - 这就像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
    
        
    269
    2018-11-27 10:48:04Z

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

    屏幕尺寸:

      

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

    屏幕密度:

      

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

    方向:

      

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

    解决:强>

      

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

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

      

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

    参考: Android开发者网站

        
    216
    2018-11-27 13:10:53Z
    dpdip。将它用于所有事物(边距,填充等)。

    仅对{text-size}使用sp


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


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

    来源: Android编程:The Big Nerd Ranch指南

        
    190
    2015-08-11 20:53:46Z

    我已经计算了下面的公式来进行转换dpidpsp

        
    135
    2017-04-06 10:24:04Z
    1. 它应该是ppi而不是dpi
      2014-01-29 17:02:47Z
    2. 醇>

    解释

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

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

    Android将别名命名为几种密度

    • 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

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

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

    使用什么?

      

    sp 用于文字大小。

         

    dp 用于其他所有内容。

        
    128
    2016-03-02 09:39:05Z

    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文件中的其他简单资源组合在一个元素下。

        
    122
    2018-11-27 09:15:09Z
    1. 另外:这个答案的附加价值是多少?似乎没有其他答案中没有提到的任何内容。
      2013-12-27 09:28:25Z
    2. 醇>

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

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

    在> 120 dpi时,它会变为0。

        
    110
    2018-03-31 10:05:28Z
    1. getDimensionPixelOffset向下舍入,getDimensionPixelSize向上舍入。
      2017-05-28 22:24:38Z
    2. 醇>

    PX 强>

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

    dp或dip

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

    使用dp:

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

    属强>

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

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

        
    93
    2013-04-02 06:35:37Z

    在哪里使用什么& px&的关系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。

        
    91
    2015-06-06 14:31:47Z

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

        
    83
    2015-02-13 18:50:12Z
    1. @EnesBattal,我认为因为dp不是一个急剧的物理尺寸,它是一个近似值。引自CapTech:“dp - 这是一个与密度无关的单元,但是单个”dp“的物理尺寸在每个屏幕密度上大致相同。一英寸大约有160”dp“。比例因子,取决于在设备的密度桶上,应用于将“dp”转换为160 dpi的像素数。单个“dp”转换的像素数取决于屏幕密度上的像素和设备下降的密度桶成。“
      2015-09-17 14:12:16Z
    2. @ RuchirBaronia,我认为DP或DIP仍然在apk里面,因为apk不知道它将运行哪种屏幕密度,所以设备独立性仍应保留。
      2015-11-25 18:18:55Z
    3. 醇>

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

    您可以在其位置使用dpdip

        
    74
    2015-07-01 14:30:11Z

    我只会使用dp。

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

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

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

    65
    2015-06-06 14:42:19Z
    1. 你知道应用于sp的字体比例因子是一个因素,对吧?影响dp的任何事情也会影响sp。也就是说,如果您的布局非常紧凑并且较大的尺寸不适合,最好使用dp而不是sp指定字体大小 - 更好的是让文本小于用户想要的完全混乱的布局。但在第一种情况下,你应该始终努力尊重用户的字体大小偏好 - 即使最大的设置也不是那么大。
      2017-02-26 22:06:15Z
    2. 醇>

    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();
    
        
    61
    2018-07-27 07:02:15Z
    1. 非常好的理解教程是:http:/vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer
      2015-03-16 10:06:05Z
    2. “我们应该避免使用sp”为什么会这样?在处理字体大小时应该使用sp,因为它考虑了用户的首选文本大小, developer.android.com/training/multiscreen/screendensities.html
      2015-03-20 10:05:57Z
    3. 我已经回答了相对于布局的观点..请阅读你提供的链接“所以你应该在定义文本大小时使用这个测量单位(但从不用于布局大小)。 “
      2015-03-20 10:22:31Z
    4. 问题是“Android中的px,dp,dip和sp之间的区别?”你的回答说“我们应该避免使用sp”。在任何地方都没有提到“布局视角”。
      2015-03-20 10:28:32Z
    5. 是.. dp和dip相同...可互换使用...我的答案是否解决了您的问题?
      2015-11-24 06:36:23Z
    6. 醇>

    通过更改dp选项,可以在运行时查看从官方文档中复制的答案中提到的“用户的字体大小首选项”之间spSettings->Accessibility->Large Text单位之间的差异。

    Large Text选项强制文字变为1.3倍。

     
    private static final float LARGE_FONT_SCALE = 1.3f;
    

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

        
    58
    2013-10-14 08:44:10Z

    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  
    
        
    50
    2015-11-24 08:32:41Z
    1. 根据文档编译器接受“dip”和“dp”,但“dp”与“sp”更一致。
      2015-11-24 08:15:46Z
    2. 醇>

    以下是Android使用的公式:

      

    px = dp *(dpi /160)

    其中dpi是以下屏幕密度之一。有关所有可能密度的列表,请转到此处

    它定义了“DENSITY_ *”常量。

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

    取自此处

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

    所以,假设您想要一个60 dp的图像用于hdpi屏幕,那么物理像素大小为60 dp是:

     
    px = 60 * (240 / 160)
    
        
    43
    2018-03-09 06:24:59Z
    Android中的

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

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

    单位间转换公式

     
     px = dp * (dpi / 160)
    
    设备

    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屏幕空间
    •   
    • 75 dp X 75 dp屏幕空间在xhdpi
    •   

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

    Java中的DPI计算器

     
    /*
    Program output
    LDPI: 165.0 X 60.0
    MDPI: 220.0 X 80.0
    HDPI: 330.0 X 120.0
    XHDPI: 440.0 X 160.0
    XXHDPI: 660.0 X 240.0
    XXXHDPI: 880.0 X 320.0
    */
    
    
    public class DPICalculator {
    
    private final float LDPI = 120;
    private final float MDPI = 160;
    private final float HDPI = 240;
    private final float XHDPI = 320;
    private final float XXHDPI = 480;
    private final float XXXHDPI = 640;    
    
    private float forDeviceDensity;
    private float width;
    private float height;
    
    public DPICalculator(float forDeviceDensity, float width, float height){
        this.forDeviceDensity = forDeviceDensity;
        this.width = width;
        this.height = height;
    }
    
    public static void main(String... args) {
        DPICalculator dpiCalculator = new DPICalculator(240,330,120);
        dpiCalculator.calculateDPI();
    }
    
    
    private float getPx(float dp, float value) {
        float px = dp * (value / forDeviceDensity );        
        return px;
    }
    
    private void calculateDPI() {
    
        float ldpiW = getPx(LDPI,width);        
        float ldpiH =  getPx(LDPI,height);
        float mdpiW = getPx(MDPI,width);        
        float mdpiH =  getPx(MDPI,height);        
        float hdpiW = getPx(HDPI,width);        
        float hdpiH =  getPx(HDPI,height);       
        float xdpiW = getPx(XHDPI,width);        
        float xdpiH =  getPx(XHDPI,height);
        float xxdpiW = getPx(XXHDPI,width);        
        float xxdpiH =  getPx(XXHDPI,height);
        float xxxdpiW = getPx(XXXHDPI,width);        
        float xxxdpiH =  getPx(XXXHDPI,height);
    
        System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
        System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
        System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
        System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
        System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
        System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
       }
    }
    

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

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

        
    43
    2018-03-28 10:24:14Z
    • px - 一个像素,与CSS,JavaScript等中使用的像素相同
    • sp - scale-independent pixels
    • dip - 与密度无关的像素

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

        
    42
    2015-06-06 14:41:25Z

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

    sp =缩放独立像素

    dp =密度无关像素

    dpi =密度像素

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

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

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

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

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

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

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

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

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

        
    38
    2019-05-16 10:37:03Z

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

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

    这篇文章帮助我了解Android中要做什么制作不同屏幕尺寸的布局:

    JMSTUDIO博客: - 决定Android App屏幕尺寸

      

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

         

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

         

    为了便于计算,我们可以遵循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设计指南:

         

    已添加:如果您对“灵活”UI感兴趣,请查看此库:提供新大小单元的Android SDK - sdp(可扩展的dp)。这个尺寸单位随着屏幕尺寸而缩放(这也在这里的答案中提到,约为SDP库)

    ADDED2 Google终于了解了iOS Storeboard UI概念的实用性,Android环境为ConstraintLayout使用ConstraintLayout构建响应式用户界面

        
    36
    2018-09-14 15:03:37Z

    1) dp: (density independent pixels)

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

    ,点击 2) sp: (scale independent pixels)

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

    ,点击 3) px: (pixels)

    屏幕上的实际像素或点。

    结果

    有关详细信息,请访问

      

    Android开发人员指南>维度
    Android开发人员指南>屏幕

        
    29
    2018-04-02 13:58:40Z
    Android中的

    屏幕尺寸分为ldpi,mdpi,hdpi,xhdpi,xxhdpixxxhdpi类别。 屏幕密度是t区域(如英寸)内的像素数量他的屏幕。通常,它以每英寸点数(dpi)测量。

    PX(Pixels):

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

    DP/DIP(Density pixels / Density independent pixels):

    • dip == dp。在之前的Android版本中,使用了dip,后来更改为dp。这是px的替代方案。

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

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

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

    SP(Scale independent pixels):

    • 根据用户的字体大小首选项进行缩放。字体应使用sp

    • 当提到适合各种屏幕尺寸的字体大小时,请使用sp。这类似于dp。使用sp特别是对于字体大小增长和放大根据屏幕尺寸动态缩小

    Android文档说:

      

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

        
    28
    2015-10-07 08:47:56Z

    手机屏幕由数千个称为像素(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 x 640像素(160 dpi)=400乘640密度独立像素(dp)

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

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

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

    参考 Udacity ,Google

        
    21
    2017-10-18 05:31:24Z
      

    sp:缩放独立像素

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

      

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

        
    17
    2018-03-09 08:59:48Z

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

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

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

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

    • 具有高分辨率的手机

    • 屏幕分辨率较低的手机

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

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

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

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

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

        
    14
    2017-12-07 17:58:56Z
    1. 你与Phone with low screen resolution混淆了相应的图像
      2017-12-04 12:30:52Z
    2. @ RoyiNamir您能解释一下您的评论,或者如果可能请建议编辑
      2017-12-07 13:23:30Z
    3. 这是一款分辨率很高的手机。不低: i.imgur.com/tnu87VR.jpg
      2017-12-07 13:24:34Z
    4. 醇>

    我想提供一种理解dp的简单方法。事实上,我认为dp是最容易理解的。 dp只是一个物理长度单位。它与mminch具有相同的尺寸。我们编写50dp,60dp而不是50/160 inch60/160 inch只是方便,因为无论屏幕尺寸或分辨率如何,一个dp只有1/160 inch

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

        
    13
    2016-04-02 03:35:21Z

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

    尝试使用Intuit中的 sdp 库。解决单元问题非常方便,您可以快速支持多个屏幕

    用法

    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用于文本大小,但我更喜欢 ssp 的文字大小。

    有关详情,请查看图书馆GitHub页面

        
    13
    2017-10-18 05:26:33Z
来源放置 这里