精华内容
下载资源
问答
  • 在Android Studio中表示长度的单位有px、sp、dp等。 1 px px是pixel即像素的简称。1px表示屏幕上的一个物理像素点。对于不同分辨率设备,像素的大小是不同的。图1是将字体的大小设置为40px时,在分辨率为480×800...

    在Android Studio中表示长度的单位有px、sp、dp等。

    1 px

    px是pixel即像素的简称。1px表示屏幕上的一个物理像素点。对于不同分辨率设备,像素的大小是不同的。图1是将字体的大小设置为40px时,在分辨率为480×800的设备上运行的效果,图2是在分辨率为1080×1920的设备上运行的效果。

     图1 480×800的设备

     图2 1080×1920的设备

    从图1和图2可以看出,虽然字体的大小均为40px,但是在不同分辨率的设备上,大小是不同的,其原因就是不同分辨率的设备上,像素的大小是不同的。

    2 dp

    dp是Device Independent pixels即设备不依赖像素的简称,在不同分辨率的设备上,dp会自动适配,显示相同的效果。图3是将字体的大小设置为40dp时,在分辨率为480×800的设备上运行的效果,图4是在分辨率为1080×1920的设备上运行的效果。

     图3 480×800的设备

     图4 1080×1920的设备

    从图3和图4中可以看出,不同分辨率中显示的大小为40dp文字的效果相同。

    3 sp

    sp是Scale Independent Pixel即与放缩无关像素的简称,sp与dp类似,在不同分辨率的设备上,sp会自动适配,显示相同的效果。sp与dp不同之处在于,当系统的字体设置发生变化时,以dp为单位的字体不会发生变化,而以sp为单位的字体会随着变化。图5中,第一个字体大小是40dp,第二个字体大小是40sp。当系统字体设置为“默认”时,两个字体一样大;当系统字体设置为“最大”时,40sp的字体大于40dp,如图6所示。

     图5 当系统字体为“默认”时

     图6 当系统字体为“最大”时

    展开全文
  • Android常用单位:1.in(英寸)屏幕尺寸:指实际的物理尺寸,为屏幕对角线的测量。一般讲的大小单位都是英寸,比如iPhone7的屏幕尺寸是4.7英寸。2.px像素(pixel):屏幕上的点,基本原色素及其灰度的基本编码。3.分辨率...

    Android常用单位:

    1.in(英寸)屏幕尺寸:

    指实际的物理尺寸,为屏幕对角线的测量。一般讲的大小单位都是英寸,比如iPhone7的屏幕尺寸是4.7英寸。

    57344ef689477e9ab4bbadf0a34f19c5.png

    2.px像素(pixel):

    屏幕上的点,基本原色素及其灰度的基本编码。

    1dfdbbb5d6556ced390eba696634f4fc.png

    3.分辨率(Resolution):

    是指屏幕上垂直方向和水平方向上的像素个数。(比如iPhone7的分辨率是1334*750)

    d6bd641e8919f87903839e1de4c97fc2.png

    4.dpi(dot per inch):

    就是每英寸的像素数,也叫做屏幕密度。这个值越大,屏幕就越清晰。

    Inch是一个物理单位(无论在任何设备上,其大小都是固定的),所以DPI就指在一个Inch的物理长度内有多少个Dot,160DPI的屏幕就表示一个Inch包含160个Dot,320DPI的屏幕表示一个Inch有320个Dot,所以说Dot的大小是不固定的。

    Android设备用DPI来表示屏幕密度(Density),屏幕密度大就表示一个Inch包含的Dot比较多。那PPI是什么呢?我们会经常看到iPad、iPhone是用PPI来表示屏幕密度,小米Pad也是用PPI来表示。

    其实对Android而言,DPI等价于PPI(Pixels-Per-Inch),DPI最早是用于印刷行业,跟PPI还是有本质不同的,Android应该是误用了DPI这个概念。具体可以参考PPI vs. DPI: what’s the difference?。

    其实我们只要知道在Android设备中,DPI 等价于 PPI 就可以了。

    d2870251b77ee4fe776c672813622b41.png

    PPI 定义

    通常我们说一个设备是多少寸时,指的是屏幕对角线(Diagonal)是多少inch,所以用对角线的像素值(px)除以对角线长度(inch),就可以计算出PPI。

    0850501181fd564a7cd08050210b7832.png

    为了简化适配工作,Android根据屏幕大小(Inch)和屏幕密度(DPI)对设备做了如下划分:

    97440427faf79c2eed114c7c08bfe404.png

    目前Android项目中的res下的图片目录对应

    6ac3a57360b87590c137f1b9dc5231ae.png

    5. dp=dip ,device independent pixels(设备独立像素):

    一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。

    这个单位的引入就是为了解决那么多不同分辨率、不同大小的屏幕,使用PX必然会导致适配困难,为了进一步简化适配工作,Android为我们提供了一个虚拟的像素单位。

    PX跟DP之间的换算关系很简单

    px = dp * (dpi / 160)

    为了保证图片在所有设备上的物理大小都一样,高DPI的设备上系统会拉伸图片,低DPI的设备上图片会被缩小,这样既会影响UE也会影响APP的执行效率。所以我们需要为不同屏幕密度的设备提供不同的图片,他们之间的对应关系如下。

    16b7ebb973e592ffda551837c148d6b6.png

    6. sp(Scale-independent pixels):

    它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时,1sp=1px。

    其概念与DP是一致的,也是为了保持设备无关。因为Android用户可以根据喜好来调整字体大小,所以要使用sp来表示字体大小。

    d0ea99c2a2d52b48cbb8a92b2d3ec9e5.png

    Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

    其他附图:

    759da80f480ae666065d029b62fdd0f7.png

    展开全文
  • 常见尺寸单位Android开发中的常用尺寸单位有如下几种:dp (dip)pxptinchsp算不知道确切含义,相信对于以上这几种尺寸单位大家也都比较脸熟,这里先让我们重新认识一下它们:dp (dip): 即设备无关像素(device ...

    常见尺寸单位

    Android开发中的常用尺寸单位有如下几种:

    dp (dip)

    px

    pt

    inch

    sp

    算不知道确切含义,相信对于以上这几种尺寸单位大家也都比较脸熟,这里先让我们重新认识一下它们:

    dp (dip): 即设备无关像素(device independent pixels),这种尺寸单位在不同设备上的物理大小相同。

    px:即像素(pixel),这个不用多说。

    pt:通常用来作为字体的尺寸单位,1 pt相当于1/72英寸。

    inch:英寸,1 英寸约等于2.54厘米,主要用来描述手机屏幕的大小。

    sp:大部分人只知道它通常用作字体的尺寸单位,实际大小还与具体设备上的用户设定有关。(如果你对"sp"的了解停留于此,那么看完这篇文章后你会更透彻的理解它^ _ ^)

    在上面几种常见的尺寸单位,dp和sp可以看做是虚拟尺寸。其中dp是与设备无关的虚拟像素单位,开发者为UI控件指定以dp为单位的大小后,在不同屏幕密度的Android设备上便能够具有相同的物理尺寸。dp的出现让开发者无需关注屏幕密度、物理像素之间的换算关系。sp则与dp相似,但它主要用作字体的尺寸单位,与dp的区别是:Android系统支持用户设定字体大小,因而sp的实际大小还会根据用户设定在原基础上进行缩放。

    下面来详细介绍dp与sp这两种尺寸单位。

    尺寸单位详解之dp

    dp的全称是device independent pixels,在具有不同屏幕密度的设备上,1 dp的物理大小是相同的。那么,什么是屏幕密度呢?

    屏幕密度

    手机的屏幕密度通常指的是手机屏幕的dpi(dots per inch),也就是每英寸的像素数。对于Android手机来说,常见的dpi有如下几种:

    ldpi:对应的dpi范围为0 ~ 120,也就是说每英寸有0到120个像素点的屏幕的屏幕密度都属于ldpi

    mdpi:dpi范围为120 ~ 160

    hdpi:dpi范围为160 ~ 240

    xhdpi:dpi范围为240~320

    xxhdpi:dpi范围为320~480

    在实际开发中,通常以dpi值120、160、240、320、480分别指代ldpi、mdpi、hdpi、xhdpi、xxhdpi。通常屏幕密度越大的手机显示的图像会越细腻。可以通过如下代码获取当前Android设备的屏幕密度:

    private void getDpi() {

    DisplayMetrics dm = getResources().getDisplayMetrics();

    Log.i("TAG", "density = " + dm.density);

    Log.i("TAG", "densityDpi = " + dm.densityDpi);

    }

    若我们在一台屏幕密度为320dpi的Android手机上运行以上代码,会得到如下输出:

    density = 2

    densityDpi = 320

    上面输出中的densityDpi就是Android手机屏幕的dpi值,那么density是什么呢?实际上它代表的是当前屏幕的dpi值与基准dpi值的比值,这个基准dpi值为160。

    现在我们已经理解了dpi,接下来让我们揭开dp的神秘面纱。

    dp

    上面我们提到了选择dpi值160作为基准屏幕密度,这个基准屏幕密度人为建立起了dp与px间的关系:在dpi为160的Android设备上,1 dp = 1px。假设x为某UI控件以px为单位的大小,y为同一UI控件以dp为单位的大小,densityDpi表示屏幕密度,则x与y的关系为:x = y * densityDpi / 160。

    介绍完了dp,接下来让我们探究一下sp这个尺寸单位的真面目。

    尺寸单位详解之sp

    在介绍sp之前,我们先来一起看下TypedValue类中包含的一个用户将dp、sp等单位转换为px的静态方法:

    public static float applyDimension(int unit, float value,DisplayMetrics metrics) {

    switch (unit) {

    case COMPLEX_UNIT_PX:

    return value;

    case COMPLEX_UNIT_DIP:

    return value * metrics.density;

    case COMPLEX_UNIT_SP:

    return value * metrics.scaledDensity;

    case COMPLEX_UNIT_PT:

    return value * metrics.xdpi * (1.0f/72);

    case COMPLEX_UNIT_IN:

    return value * metrics.xdpi;

    case COMPLEX_UNIT_MM:

    return value * metrics.xdpi * (1.0f/25.4f);

    }

    return 0;

    }

    若要将dp转换为px,会执行如下代码:

    return value * metrics.density;

    density我们在前面介绍过,指的是当前dpi与基准dpi(160)的比值。density的计算方式就是当前屏幕的dpi除以160。也就是说,在屏幕的dpi为120、160、320、480时,density的值分别为0.75、1、2、3。

    若要将sp转换为px,则会执行如下代码:

    return value * metrics.scaledDensity;

    可以看到,sp转换为px的计算公式与dp转换为px时相似,那么scaledDensity是什么呢?实际上,scaledDensity不同于density,scaledDensity是可以动态改变的,当用户改变了Android设备的字体缩放比例时,scaledDensity的值就会发生变化。scaledDensity的计算公式为:scaledDensity = density * fontScale。其中fontScale代表用户设定的Android设备字体缩放比例,默认为1。也就是说,当用户没有改变Android设备的字体缩放比例时,sp、dp与px的换算是相同的。

    多分辨率之殇

    市面上存在着的各种不同分辨率的Android设备为广大Android开发者挖了众多的坑,比如:

    需要为不同分辨率的Android设备单独维护一套dimens文件;

    通常UI设计师只会针对某种特定分辨率的设备为我们标注UI控件的像素大小,相信不少小伙伴都受够了手动换算不同分辨率设备上UI控件像素大小的痛苦;

    通常我们需要为每种分辨率的Android设备维护一个drawable文件夹以获得比较好的图片显示效果,这会导致apk文件尺寸的臃肿;而且若某个drawable文件夹下的图片需要修改,那么就需要替换其他所有drawable文件夹中对应的图片。如果不小心漏掉了某个drawable文件夹下的图片,则会导致该图片在某些分辨率的手机上失真。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    展开全文
  • #1楼 参考:https://stackoom.com/question/m372/Android并以dp单位以编程方式设置宽度和高度 #2楼 I know this is an old question however I've found a much neater way of doing this conversion. 我知道这是...

    本文翻译自:Android and setting width and height programmatically in dp units

    I'm doing: 我正在做:

    button.setLayoutParams(new GridView.LayoutParams(65, 65));

    According to the docs the units for the width and height (both 65 in the above) are "pixels". 根据文档,宽度和高度的单位(上面均为65)是“像素”。 How do you force this to be device independent pixels, or "dp"? 你如何强制这是设备无关的像素,或“dp”?


    #1楼

    参考:https://stackoom.com/question/m372/Android并以dp为单位以编程方式设置宽度和高度


    #2楼

    I know this is an old question however I've found a much neater way of doing this conversion. 我知道这是一个老问题但是我发现了一种更简洁的方式来进行这种转换。

    Java Java的

    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
    

    Kotlin 科特林

    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
    

    #3楼

    Looking at your requirement, there is alternate solution as well. 根据您的要求,还有其他解决方案。 It seems you know the dimensions in dp at compile time, so you can add a dimen entry in the resources. 您似乎在编译时知道dp中的维度,因此您可以在资源中添加维度条目。 Then you can query the dimen entry and it will be automatically converted to pixels in this call: 然后你可以查询dimen条目,它将自动转换为此调用中的像素:

    final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
    

    And your dimens.xml will have: 而您的dimens.xml将具有:

    <dimen name="dimen_entry_in_dp">72dp</dimen>
    

    Extending this idea, you can simply store the value of 1dp or 1sp as a dimen entry and query the value and use it as a multiplier. 扩展这个想法,你可以简单地存储1dp或1sp的值作为维度条目并查询该值并将其用作乘数。 Using this approach you will insulate the code from the math stuff and rely on the library to perform the calculations. 使用此方法,您将使代码与数学内容隔离,并依赖库来执行计算。


    #4楼

    simplest way(and even works from api 1) that tested is: 测试的最简单方法(甚至可以从api 1开始):

    getResources().getDimensionPixelSize(R.dimen.example_dimen);
    

    From documentations: 来自文件:

    Retrieve a dimensional for a particular resource ID for use as a size in raw pixels. 检索特定资源ID的维度,以用作原始像素的大小。 This is the same as getDimension(int), except the returned value is converted to integer pixels for use as a size. 这与getDimension(int)相同,只是将返回的值转换为整数像素以用作大小。 A size conversion involves rounding the base value, and ensuring that a non-zero base value is at least one pixel in size. 大小转换涉及舍入基值,并确保非零基值的大小至少为一个像素。

    Yes it rounding the value but it's not very bad(just in odd values on hdpi and ldpi devices need to add a little value when ldpi is not very common) I tested in a xxhdpi device that converts 4dp to 16(pixels) and that is true. 是的,它会使值四舍五入,但它并不是很糟糕(只是在hdpi和ldpi设备上的奇数值需要在ldpi不常见时添加一点值)我在xxhdpi设备中测试,将4dp转换为16(像素),这是真正。


    #5楼

    You'll have to convert it from dps to pixels using the display scale factor. 您必须使用显示比例因子将其从dps转换为像素。

    final float scale = getContext().getResources().getDisplayMetrics().density;
    int pixels = (int) (dps * scale + 0.5f);
    
    展开全文
  • Android 屏幕适配攻略(三)单位dp与sp 1 一般手机默认使用情况下 在安卓中,一般情况下,也就是正常使用情况下 屏幕密度 对应的标签 对应的像素 sp 120dip ldpi 1dp= 0.75px 1sp= 0.75px 160dip mdpi 1...
  • Android 字体大小单位sp和dp的区别

    千次阅读 2018-11-04 12:06:19
    1、当修改系统字体大小时,字体大小以dp单位时,大小不变; 2、当修改系统字体大小时,字体大小以sp为单位时,大小跟随变化; 因此通常情况下,我们还是建议使用sp作为字体的单位,除非一些特殊的情况,不想跟随系统...
  • 尺寸单位 rpx 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。----- 在不同设备上rpx与px...
  • PX、DP单位转换工具类

    2016-12-19 09:35:35
    import android.app.Activity; import android.content.... * PX、DP单位转换 */ public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context contex
  • 各种尺寸单位详解,px, dp, sp...

    千次阅读 2015-09-28 21:37:43
    像素密度:每英寸包含的像素点数,单位dpi (Dots Per Inch)。  1in = 160dp;  1dp = 0.00625in; 这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度...
  • 偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他单位dp会显得模糊。 dp: 这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机...
  • android 图片文字尺寸(dp和sp)

    千次阅读 2015-06-04 11:12:07
    密度density指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi作为单位。比如一台分辨率为240X320,屏幕物理尺寸为1.5英寸的手机,他的密度可以用分辨率/尺寸,240/1.5或者320/2,密度为160dpi。对于用户来...
  • 单位辨析dp px sp

    2019-02-21 19:55:39
    dpdp是一个与像素密度(dpi)相关的单位,与dip一样   所谓像素密度(dots per inch)就是每英寸的像素点个数,有些横向和纵向的像素密度是不一样的,但是现在大多数的手机都是正方形像素,所以横向和纵向的像素...
  • 相信每个Android新手都会遇到这个问题,希望这篇帖子能让你不再纠结。 px: 即像素,1px代表屏幕上一个物理的像素点;...偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他单位dp会显得模
  • 一、基本概念dp:安卓中的相对大小dpi:(dot per inch)每英寸像素多少px:像素点二、详细说明1、px和dpipx:平常所说的1920×1080只是像素数量,也就是1920px×1080px,代表手机高度上有1920个像素点,宽度上有1080...
  • 开发过程中有时候需要为视图指定尺寸的大小(通常以像素为单位,有时候也用点、毫米或英寸来表示),常用的属性有: 1.text size,指的是设备上显示的文字像素高度 2.margin,指定视图组件之间的距离 3.padding,...
  • 1、px:屏幕上的点 pixel,表示像素或分辨率。不同设备显示效果相同,一般我们的 HVGA 代表 320x480 像素,这个用的比较多。 2、dp:设备独立像素 ...这个有点像dp单位,但是它也根据用户的字体设置(...
  • dip:英文device independent pixels(设备独立像素)。所有的设备都有一个统一的dip大小(480*320),就是说,android的dip就是把屏幕的高分成了480个dip,宽分成了320个dip,每个dip在高中表示...dp:完全等同于dip。
  • 二、dp要理解dp,首先要先引入dpi这个概念,dpi全称是dots per inch,对角线每英寸的像素点的个数,所以,它的计算公式如下:比如height和width即为长宽的像素,平方和即为对角线的像素个数,size即我们常说的5寸...
  • [Android] 字体使用dp单位避免设置系统字体大小对排版的影响     以魄族mx3为例,在设置->显示->字体大小中可以选择字号大小如下图: 图1. 魄族mx3 会导致软件在有固定定高的界面中”已关联”显示不完全。如下图...
  • Android 中的长度单位详解(dp、sp、px、in、pt、mm)具体解释与换算
  • 首先解释下这几个单位的代表意思。 由于过去通常以像素为单位设计计算机用户界面。当一个像素在80x80的时候,在高分辨率显示器上运行该程序,则用户界面会显得很小。所以采用与分辨率无关的度量单位来开发程序就...
  • Android中px,dp,sp单位的区别和应用

    千次阅读 2016-06-08 15:34:26
    px就是pixel的缩写啦,pixel即像素,它不是自然界的长度单位。px是就是一张图片中最小的点,一张位图就是由这些点构成的。1024px就是1024像素,最简单的你可以在windows桌面属性里的“设置”看到,如果是1024×768,...
  • 长度单位1、重要概念1.1 屏幕尺寸1.2 屏幕分辨率1.3 屏幕像素密度1.4 屏幕尺寸、分辨率、像素密度三者关系2、六种单位介绍2.1、dp和px的换算2.2、在代码中转换单位2.3、sp与dp的区别2.4、总结参考 1、重要概念 1.1 ...
  • 像素单位px、dp、sp的区别与理解

    千次阅读 2015-08-24 21:12:25
    px:即像素,1px代表屏幕上一个物理的像素点; 不同屏幕比例:相对布局 不同屏幕尺寸:fragment ...px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自a
  • px 即像素,1px代表屏幕上一个物理的像素点;...dp / dip 它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。 不同的手机/平板...
  • dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关, 一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。dp也就是dip,这个和sp基本类似。 如果设置表示...
  •   作为小白学习了一段时间...dp或dip(device independent pixels,设备独立像素)   在日常开发中这是最常用的一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dip=1px.但随着屏幕的密度...
  • 屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等。 屏幕分辨率:指在纵横向上的像素点数,单位是px,1px为一个像素点,一般格式为纵向像素*...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,050
精华内容 5,220
关键字:

文字dp单位