DisplayMetrics信息

DisplayMetrics信息获取:

//Display屏幕显示的详细信息
Display display = getWindowManager().getDefaultDisplay();
//从Display获取DisplayMetrics信息                
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);

PS:上面获取的DisplayMetrics只可读,第二种获取DisplayMetrics的方式:
context.getResources().getDisplayMetrics()可修改里面的参数参考

以下为两个屏幕的DisplayMetrics信息:

小米4c 屏幕4.9英寸

注意:上图4c的xdpiydpi略有差值,后面会说到

小米mix2 屏幕5.99英寸
  1. widthPixels:屏幕宽度
  2. heightPixels:屏幕高度
  3. densityDpi:屏幕密度,每英寸的像素数
  4. density:密度比值,和densityDpi相关,其实就是densityDpi/160得出来的值(160密度就是谷歌定的一个密度标准),不同手机dp换算px就是通过该值。
  5. scaledDensity:同density,用于文字缩放的计算,也就是sp
  6. xDpi:水平方向的真实密度
  7. yDpi:垂直方向的真是密度

densityDpi和density关系:

上面已经说了,density就是densityDpi除以标准密度160的出来的一个比值(参考上图),主要用于常用dp的计算,比如小米4c控件宽设为360dp的话,换算成像素就是1080px就是全屏了。

densityDpi和xDpi、yDpi的关系:

xDpiyDpi是屏幕真实的屏幕密度,如上面小米mix2获取是403.411,而小米宣传的mix2屏幕密度就是403ppi,densityDpi大概是厂家设定的一个值(确实没搞清这个值怎么得来的),咱们做界面适配基本也只会使用densityDpixDpiyDpi的使用后面会提。
下面放一个屏幕密度的简单的计算:

小米mix2屏幕密度计算

注意:上面配图获取的宽高信息是可用区域的信息,小米mix2的高其实是2160px,因为底部有虚拟导航栏,占掉一部分可用只有2030,屏幕详细信息可以通过Display类获取,下面有mix2的详细屏幕信息

关于Typevalue的计算 :

参考

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的换算通过 metrics.density,文字sp的换算通过metrics.scaledDensity,而我们不常用的单位:pt磅,in英寸,mm毫米,都采用了xdpi来计算,大概是因为这几个单位都是物理尺寸吧,比如in英寸的算法,就是value*xdpi简单粗暴好理解。

PS:对于一块屏幕来说横向竖向的屏幕密度应该是一样的,因为其实就是一块玻璃嘛,屏幕密度都是均匀的,也就是说xdpiydpi应该是一样的,最上面看到mix2的是一样的,小米4c居然略有不同,大概是小米4c屏幕略渣吧

关于粗暴适配的核心计算方法:原文

是一种百分比适配的方式,采用了冷门的pt作为单位 :
参考上文pt的原始计算方法 简写为如下:
value*xdpi/72
举例:假如设计稿宽度200,控件宽40,手机屏幕宽度1000像素
修改xdpi的值为:屏幕真实宽度÷设计稿宽度×72
xdpi = 1000/200*72
这样控件宽度算出来的结果就是:200像素百分20宽

value*   (1000/200*72)   /72   //括号内为xdpi的值

切记:
dp转像素:乘以density
像素转dp:除以density

小米mix2屏幕详细信息
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容