Android屏幕适配(理论适配100%机型)

屏幕适配是我们Android开发,老生常谈的问题!

面试官:看你简历上写着熟悉Android屏幕的适配,那就说一说吧

我:

1、我们为什么要适配?

Android系统是开放的,是开源的,任何用户,开发者,手机厂商,运营商都可以对Android进行定制,比如小米,华为等等,还有许许多多的工控板,用的也是Android系统。
于是乎,导致了运行Android系统的设备,多种多样,既然设备多了,就保不齐它们有着不同的屏幕尺寸,和像素密度。尽管系统可通过基本的缩放和调整大小功能使界面适应不同屏幕,但Android开发者应做出进一步优化,使我们的程序在各类屏幕上更beautiful的显示出来。


2、关于屏幕的几个概念

屏幕尺寸: 屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54cm

比如我的小米11Pro的尺寸

屏幕分辨率: 屏幕分辨率是指在横纵向上的像素点数,一般以纵向像素横向像素,19201080 表示宽度方向有1080个像素点,高度方向有1920个像素点,整个屏幕有1920*1080个像素

单位px 1px=1像素点

屏幕像素密度(dpi): 屏幕像素密度是指每英寸上的像素点数,单位是dpi,即 dot per inch 的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关系,在单一变化条件下,屏幕尺寸越小,分辨率越高,像素密度越大

密度类型 代表的分辨率(px) 屏幕像素密度(dpi)
低密度(ldpi) 240x320 120
中密度(mdpi) 320x480 160
高密度(hdpi) 480x800 240
超高密度(xhdpi) 720x1280 320
超超高密度(xxhdpi) 1080x1920 480

分辨率是宽×高

密度无关像素: density-independent pixel ,dp或者dip,就是我们Android开发时用的宽度单位,可以保证在不同屏幕像素密度的设备上显示相同的效果

dp和PX转换

dpi就是屏幕像素密度,160这个值是谷歌官方规定的一个值,

规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px

看以上的数据资料,我们发现,再开发过程中我们去使用dp的话,Android根据屏幕像素密度去适配了,但是为什么我们写出来的页面还是效果不理想呢!

3、Android屏幕适配方案

那是因为我们UI在给我们图的时候屏幕宽度是一个固定值,但是由于Android手机的屏幕的多样性,屏幕像素换成dp之后,长度也是多样性的,所以我们按照UI的尺寸出完效果,效果所以不太理想,为了解决这个问题,我们来更改一下几个参数值,来达到,我们按照UI给的设计图尺寸来编写代码,在其他Android设备上达到一个百分比适配!

以360dp为宽度的设计稿为例子 density的值就是dpi/160

public static void setCustomDensity
    (Activity activity,final Application application){
    final DisplayMetrics appDisplayMetrics
        =application.getResource().getDisplayMetrics();
        
    final float targetDensity=appDisplayMetrics.widthPixels/360;
    final int targetDensityDpi=(int)(160*targetDensity);
    appDisplayMetrics.density=targetDensity;
    appDisplayMetrics.densityDpi=targetDensity;
    //Activty 的DisplayMetrics也要设置
    final DisplayMetrics activityDisplayMetrics
        =activity.getResource().getDisplayMetrics();
         activityDisplayMetrics.density=targetDensity;
    activityDisplayMetrics.densityDpi=targetDensity;
    
}
复制代码

这样就能按百分比适配了,屏幕宽度像素/设计稿尺寸 能把1dp=多少像素值算出来,也就是density的值,这个值算出来之后,就能算出来360dp的dpi,设置完之后,再按设计稿的尺寸来,就能做到和设计稿百分比适配了

这个就是适配的核心方案,感觉适配大部分设备效果还是很好的!

作者:被遗忘的凉白开
链接:https://juejin.cn/post/7011396964164042760
来源:掘金

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

推荐阅读更多精彩内容