‘壹’ android 关于"尺寸"的那些事(dp,dip,sp,pt,px...)
屏幕大小:屏幕大小是手机对角线的物理尺寸,以英寸inch为单位。比如我的Mix 2手机屏幕大小为5.99 inches,意味着我的屏幕对角线长度为5.99inches = 5.99 * 2.54 = 15.2146cm
分辨率:屏幕的像素点数,一般表示为a*b。例如某手机分辨率为21601080,意味着手机屏幕的竖直方向(长)有2160个像素点,水平方向(宽)有1080个像素点。
px :Pixels ,像素;对应屏幕上的实际像素,是画面中最小的点(单位色块),像素大小没有固定长度值,不同设备上1个单位像素色块大小不同。
这么说可能有点陌生,用屏幕分辨率来说,今年流行起来的“全面屏”分辨率是 2160*1080,但是你也可以发现,虽然很多全面屏手机分辨率一样,但是明显看得出来屏幕大小不一样,这也解释了“不同设备像素色块大小是不同的”。
pt :1pt=1/72 inch,用于印刷业,非常简单易用;
dpi :Dots Per Inch,每英寸点数;详见ppi
ppi :Pixels Per Inch,每英寸像素数;数值越大显示越细腻。计算式:ppi = 屏幕对角线像素数 / 屏幕对角线长度。
还是举全面屏的例子,分辨率2160*1080,屏幕大小是5.9inches,勾股定理可以得到对角线像素数大约是2415,那么ppi = 2415 / 5.99 = 403.
事实上dpi 和 ppi 一定程度上可以划等号,都表示像素密度,计算方式完全一致,只不过使用场景不一样。dpi中的dots点属于打印或印刷等领域,例如drawable 文件对应的就是dpi,而ppi中的pixel属于屏幕显示等领域
dp/dip : Density-independent Pixels,密度无关像素 - 基于屏幕物理密度的抽象单位。1dp等于 160 dpi 屏幕上的dpx,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单:px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。
如果看完文章还是觉得很懵,那么可以直接记住: 1dp单位在设备屏幕上总是等于1/160 inch。
sp :Scale-independent Pixels ,与 dp 单位相似,也会根据用户的字体大小偏好进行缩放。
首先我们放上源码中对尺寸单位的转换
可以看到,输入值类型为dp时,返回 value * DisplayMetrics.density,到这里我们可能会发懵:嗯?不对啊,前面我们不是通过px 和 dp 的换算公式来计算的么,怎么这里就简简单单乘了一个DisplayMetrics.density?不要慌,我们先看看源码中对DisplayMetrics.density的介绍。
源码注释中说到“在160dpi的屏幕下,density的值为1,而在120dpi的屏幕下,density的值为0.75”,我们可以大胆的猜测一下,120dpi下的density=0.75的原因是120dpi * 1 /160dpi=0.75。实际上,也就是这么回事。我们下面会仔细的分析。
需要补充一下,通常意义上Android 屏幕的密度,指的是像素密度dpi/ppi,对应于源码中的DisplayMetrics.densityDpi。
为什么引入dp?
Android 引入了dp这一单位,使得不论多大屏幕,多大dpi,显示的效果始终保持一致。
但是根据前面我们提到的px与dp的换算公式px = dp * (dpi / 160),很显然,由于相同分辨率但不同屏幕大小的设备dpi是不同的,导致px和dp的基本不存在一个固定的换算关系,为了方便屏幕适配,Android设置了6个通用的密度,换算px与dp时采取通用密度计算,而非设备实际的密度。
以下为6种通用密度,以及其最小的分辨率
得到上面通用密度之后,我们换算dp与px多了一种简便方式。前面我们提到Android将mdpi作为基准,此时1px = 1dp,又有px = dp * (dpi / 160),所以我们可以很容易的得到以下换算:
还记不记得前面源码中的density属性,实际上DisplayMetrics.density = dpi / 160 ,表示的就是在某个通用密度下dp与px的换算比(1dp/1px的值)
这部分其实和程序员自身已经关系不大了,毕竟参与工作之后这些都是UI人员的活儿了。不过鉴于现在我还只是一枚在校生,还是记下来以免自己遗漏吧。
建议在xhdpi中作图
原因嘛,首先现在主流分辨率是1080p,以及最近流行起来的全面屏18:9,而xhdpi对应720p,向低dpi兼容自然没问题,即便在xxhdpi中显示,也会有个不错的效果。而如果以1920*1080作图,显然图片素材占用的内存很大,而且也会增大应用安装包的大小。
只有一个原则:资源放入对应dpi的文件夹中,Android会机智的加载合适的资源。
以drawable资源为例:
我们平时开发小项目&对UI要求不高时,只使用一套xhdpi的资源就足够了,虽然这可能会导致在hdpi及以下的手机中有些卡顿,因为xhdpi的图片运行在hdpi及以下的手机上会比较吃内存,不过无伤大雅。
而如果不为图片资源犯愁时(有UI人员的支持,就是任性),就可以添加所有dpi的资源。当然,重点还是要满足ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的规律。
好像说了不少废话,哈哈,大概就这么多吧。
‘贰’ 鍗庝负骞虫澘m610.8灞忓箷闀垮藉氩皯姣绫冲介暱瀹芥瘆锛
𨱒跨数鑴戞墍璋撶殑8瀵革纴鎸囩殑鏄灞忓箷镄勫昂瀵革纴钥岄潪镓嬫満鏁翠綋链哄櫒镄勫昂瀵革绂 灞忓箷灏哄閲岀殑8瀵告寚镄勬槸灞忓箷瀵硅掔嚎镄勯暱搴︼绂 1瀵哥瓑浜2.54铡樼背锛涢偅涔8瀵哥瓑浜20.32铡樼背锛 濡傛灉𨱍崇煡阆揿睆骞曢暱鍜屽界殑璇濆氨寰楃湅灞忓箷镄勬瘆渚嫔昂瀵镐简銆 镓浠ワ纴濡傛灉浣犵殑8瀵骞虫澘鐢佃剳涓16锛9锛岄偅涔埚睆骞曢暱瀹藉垎鍒涓20.32铡樼背鍜12.1铡樼背銆傦纸甯屾湜鑳藉府鍒颁綘锛佹湜閲囩撼锛佽阿璋锛侊级
韬镄勬濊&瀹炶返
缁欎綘甯︽潵涓绉嶅叏鏂般佸叏闱㈣岄昏緫娓呮榈镄𪞝ndroid灞忓箷阃傞厤镐濊矾锛屽彧瑕佷綘璁ょ湡阒呰伙纴淇濊瘉浣犺兘瑙e喅Android镄勫睆骞曢傞厤闂棰桡紒
鐩褰
Android灞忓箷阃傞厤瑙e喅鏂规.png
瀹氢箟
浣垮缑镆愪竴鍏幂礌鍦ˋndroid涓嶅悓灏哄搞佷笉钖屽垎杈ㄧ巼镄勬坠链轰笂鍏峰囩浉钖岀殑鏄剧ず鏁堟灉
鐩稿叧閲嶈佹傚康
灞忓箷灏哄
钖涔夛细镓嬫満瀵硅掔嚎镄勭墿鐞嗗昂瀵
鍗曚綅锛氲嫳瀵革纸inch锛夛纴1鑻卞=2.54cm
Android镓嬫満甯歌佺殑灏哄告湁5瀵搞5.5瀵搞6瀵哥瓑绛
鎴戜釜浜虹敤浜呜繖涓骞虫澘宸茬粡宸涓嶅氢簲涓链堜简锛屾垜鏄鍦19骞村浗搴呜妭镞跺欎拱镄勶纴瀹炰綋搴楅噷涔扮殑杩橀佷简涓涓鍗庝负镄勮掴鐗欓煶绠憋纴4锷128g鍏ㄧ绣阃氱増链镄3499鍏冧拱镄勶纴 鎴戜篃绠楁槸链変简涓涓鍗庝负鍗娄釜鍏ㄥ舵《镄勭敤鎴蜂简锛屼竴閮钻h10镓嬫満锛屼竴涓钻h镓嬬幆锛屼竴涓骞虫澘锛屼竴涓鍗庝负钃濈堕阔崇 IMG_20200229_150051.jpg
鎴戜滑鐜板湪杩涘叆姝i
棣栧厛鏄娌℃湁寰淇HD杩椤氨寰堜笉鏂逛究锛屾坠链哄拰骞虫澘涓嶈兘钖屾椂锏诲綍锛屽彧链塓QHD锛岃屼笖QQHD鐗堟湰寰堣佷竴鐩存病链夊幓镟存柊锛屽緢澶锷炲叕杞浠涔熸槸鐗堟湰閮藉緢钥侀噷闱㈠箍锻婃弧澶╅烇纴瑕佷箞灏辨槸涓嶉傞厤锛岃缮链夊氨鏄妗岄溃镄勫佺焊绔栫潃鏄涓涓镙凤纴妯镌涓嶆槸鏀惧ぇ灏辨槸妯$硦镄勪笉琛岋纴杩欐槸骞虫澘鎴锲剧殑锛屼紶鍒版坠链轰笂闱涓娄紶鍑烘潵镄 Screenshot_20200229_144712_com.huawei.android.launcher.jpg Screenshot_20200229_144700_com.huawei.android.launcher.jpg
鎺ョ潃鏄阌鐩桡纴绔栫潃杩桦ソ锛屾í镌灏辨槸𨰾変几鏀惧ぇ锛屾寜阌澶х殑澶稿紶锛屽竷灞涓嶆槸寰埚ソ锛屽备笅锲撅纴鐪熺殑灏卞儚涓涓灞忓箷澶т竴镣圭殑瀹夊崜镓嬫満锛 Screenshot_20200229_144748_com.huawei.android.launcher.jpg Screenshot_20200229_144735_com.huawei.android.launcher.jpg 杩樻湁灏辨槸杩欎釜鍣卞ご 鐢佃剳妯″纺
鐪嬩技寰埚己锛屽疄鍒椤氨鏄涓涓绠绾︾増镄勭数鑴戞岄溃锛屼笉鑳芥斁澶у叏灞忓幓鐪嬶纴灏卞彧鑳芥敮鎸佸氩紑锛屼笅闱㈠氨鏄鐢佃剳妯″纺鍏ㄥ睆链澶ц傜湅灏辫繖涓锛屽皬灏忕殑涓镣箈swl锛屾墍浠ヨ缮鏄鍒鐢ㄧ数鑴戞ā寮忚拷鍓э纴浣曡皥鐢熶骇锷涳纴
钖庢倲褰撴椂涓嶅惉链嫔弸璇濅拱iPad锛屾渶杩戞墦绠闂查奔鎴栬呭叾浠朅PP鍗栦简鎹iPad锛屽氨娌℃湁寰淇HD鎴戝氨涓嶅枩娆锛岀劧钖庢槸钖逛笂澶╃殑锲涘0阆揿枃鍙鐪熸病镒熻夊埌阔宠川链夊氩ソ锛岃缮链変粈涔𨱒沧瘆鍏ㄦ櫙澹伴煶鏁堢畻浜嗗惂銆 IMG_20200229_152925.jpg IMG_20200229_152609.jpg IMG_20200229_152421.jpg
灞忓箷鍒呜鲸鐜
‘叁’ Android 中8dp是多少毫米
DP是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英
寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或
320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per
Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。
Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系
数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示
为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不
多”,
‘肆’ android屏幕适配做哪几个尺寸
android屏幕适配尺寸有全屏模式、4:9、8:12多种。
android屏幕适配尺寸有多种,具体的要结合自己的兴趣爱好和手机的自身的实际情况,具体设置标准如下:
1、不要使用绝对布局,这会限制你的手机屏幕的更换。
2、尽量使用match_parent ,从而保证屏幕的最大化利用。
3、尽量使用权重(android:layout_weight),保持手机屏幕合理布局。
4、尽量使用android的shape 自定义,形成纯色背景。
5、可以在res目录上新建layout-HxW.xml的文件夹进行在特定分辨率下适配。
拓展资料:
由于笔记本电脑采用的液晶屏的大小和分辨率是根据它的市场定位决定的,所以为了适应不同人群的消费能力和使用习惯,笔记本电脑的液晶显示器的尺寸和分辨率种类远远要比台式液晶显示器多。