搜档网
当前位置:搜档网 › 黑马程序员Android就业面试技巧系列-技术篇(屏幕适配)

黑马程序员Android就业面试技巧系列-技术篇(屏幕适配)

黑马程序员Android就业面试技巧系列-技术篇(屏幕适配)
黑马程序员Android就业面试技巧系列-技术篇(屏幕适配)

【济南中心】Android就业面试技巧系列-技术篇(屏幕适

配)

答题技巧

屏幕适配是目前安卓开发大部分程序员都会遇到的问题,回答时候,面试官会直接问你对屏幕适配如何看待,此问题需要循序渐进,点滴从经验作答,最终阐述清楚原理。具体可分如下步骤:

1、开发中遇到的机型以及分辨率

2、开发中用到的屏幕适配方案,以及科学的屏幕适配共有几种

3、根据自己经验,哪种适配适合什么场合使用

4、屏幕适配原因以及适配原理如何

5、自己对屏幕适配的感觉以及未来发展方向的评估

回答要点

1、为什么要进行屏幕适配。

2、屏幕适配原理如何。

3、日常开发中针对不同机型以及不同情况使用到的屏幕适配方案。

要点一:为什么要进行屏幕适配。

安卓手机的多样化如今越来越显现出来,各大厂商都开始开发属于自己的系统以及机型,分辨率也是千变万化,适应了自己的需求。

要点二:屏幕适配原理如何。

说完为何要屏幕适配,紧接着我们就进入我们的重点,屏幕适配该怎么做,首先我们要明白几个概念,屏幕尺寸,屏幕分辨率以及屏幕像素密度。

屏幕尺寸指的是屏幕的对角线长度,以手机为例,目前我们常见的尺寸有4.2、5.0、5.5等,屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

说完基本的概念之后,我们就会引出几个基本的单位,dp、dip、dpi、sp、px。

1、首先我们说明,px即像素,一个像素则表明在屏幕上的一个点,一个显示单位。

2、dp和dip是一个意思,全称是密度无关像素,在Android中,规定以160dpi为基准,1dip=1px如果密度是320dpi,则1dip=2px,以此类推。

3、dip和dp我们明白了,那么dpi呢,dpi即Diagonal pixel,代表每英寸像素数,表

示对角线的像素值,我们以WVGA(800*480)分辨率,3.7英寸的密度为例(图2),dpi = 933/3.7=252,即我们此机型的dpi为252。

当我们拿到一部需要适配的手机的时候,如果知道了它的dpi,此时我们就可以做适配了。在安卓设备中,我们目前可以分为mdpi、hdpi、xdpi、xxdpi等几种情况,ldpi已经不太常见,针对这几种dpi,我们可以按照图3所示,来判定我们需要适配的设备位于哪个范围。从而根据此不同的dpi进行不同的处理,来实现我们的适配目的。

要点三:日常开发中针对不同机型以及不同情况使用到的屏幕适配方案。

目前我们开发中能使用到的屏幕适配方法,有以下几种:

1、使用不同套图适配

a) 使用套图适配,目前来说是针对图片适配的最好适配方法,可以防止图片的失真以及变形,但针对不同手机进行不同的套图适配,会对UI人员施加过大的工作压力以及对我们app 本身也会造成冗余的影响,我们都知道,图片资源是使我们app变的臃肿罪魁祸首。

b) 优点:完美适配,不会失真

c) 缺点:不易达到,app臃肿

2、9path适配

a) 9path图片作为特殊的png图片,可以在特定的情况下对不同机型进行适配,而达到图片不失真的情况。

b) 优点:①省精力和时间、②省内存、③减少代码量

c) 缺点:需要每张图片进行制作处理,单一,图片中部分区域不会随整图改变而改变,从而不能完全适合所有图片适配

3、布局适配

a) 使用权重适配

i. 由图4可以看出,在格局比较明朗的页面中,如果我们能少用具体大小dp值,多用权重,可以在不同的分辨率下都能做到完美适配。但此种适配仅仅局限于格局比较明朗的界面中,如果在一个界面中,有各种嵌套和各种复杂布局,则就显得力不从心了。

4、使用dimens适配

根据不同values下的dimens进行适配,android项目会自动找寻相适应的dimens,我们可以在多种不同的values下建立dimens文件如图

在使用dimens的时候,我们可以在dimens文件中,用px为单位,这样就能达到完美适配。如图

5、代码适配

a) 我们也可以在java文件中,使用java代码进行适配,相比较xml的话,此种适配方法更迅捷。

b) 通过获取View的参数并结合dimens进行适配

i. https://www.sodocs.net/doc/6b14857651.html,youtParams p

= new https://www.sodocs.net/doc/6b14857651.html,youtParams(https://www.sodocs.net/doc/6b14857651.html,youtParams.FILL_PARENT,Linear https://www.sodocs.net/doc/6b14857651.html,youtParams.WRAP_CONTENT)

ii. getResources().getDimension(R.dimen.dimen_1_dip);

相关主题