Android技术篇-了解Android的屏幕适配

看了郭霖大神的屏幕适配 http://blog.csdn.net/guolin_blog/article/details/8830286

还有stromzhang 的屏幕适配的文章 http://www.stormzhang.com/android/2014/05/16/android-screen-adaptation/

做一个归纳和总结,以便能深刻了解和记住,这个也是面试中常常问到的。

首先了解关于屏幕适配的几个关键词:px,in,dpi,density,dip。

px:是屏幕的像素,平时所说的400*800 ,指的就是像素,而且 像素没有小数,没有 0.5之类的小数。

in:英寸,是手机的屏幕尺寸大小,就像手机的5英寸,4英寸的屏幕,是屏幕斜对角的长度,每英寸是2.54厘米。

dpi:每英寸的像素数。例如手机是 320*480 的分辨率,手机的屏幕尺寸是 宽 2英寸,长3英寸,这样就是 320/2=160 ,480/3=160,160就是dpi。大部分的手机的横向和纵向的值是相同的,原因是大部分手机的像素点都是正方形的。

density:屏幕的密度,density = dpi / 160;

dp(dip):设备的独立像素。在160dpi 的手机屏幕上,1dp=1px。

sp:和dp的效果相似,是用在字体的大小上。


在res/ 中,会看到很多drawable的文件夹

  • drawable-ldpi (dpi=120, density=0.75)

  • drawable-mdpi (dpi=160, density=1)

  • drawable-hdpi (dpi=240, density=1.5)

  • drawable-xhdpi (dpi=320, density=2)

  • drawable-xxhdpi (dpi=480, density=3)

Wrap_Content 和 xhdpi

xhdpi的规格的图片为首选,如果将所有的xhdpi规格的图片放在xhdpi中,然后使用wrap_content,android sdk 会自动根据屏幕的大小进行适配。假如在xhdpi中放入了 120 x 120的图片,然后hdpi的屏幕去请求图片,就会自动缩放为 120/2 * 1.5 =90 ,但是同样的图片放入 mdpi 中,用mdpi的屏幕手机去加载这张图片,mdpi的设备会首先去mdpi的drawable中请求这张图片,发现有这张图片,就不会去 xhdpi中请求、缩放。

120/2 * 1 = 120 px , 这样没有缩放,就会造成图片的样式发生改变。 


同样,wrap_content 与 dp 可以相互转化。通过在layout中,wrap_content的值,可以通过 dp = 分辨率/2 * density  进行转化。 


Andriod官方提供的屏幕自适应的全部方法

  • 让你的布局可以充分的自适应屏幕
  • 根据屏幕的配置去加载合适的UI布局
  • 正确的布局加载在正确的屏幕上
  • 根据屏幕大小自动拉伸、缩小图片

分为几个方法:

  • wrap_content match_parent 去让布局自适应屏幕的大小,根据屏幕的大小进行伸缩。
  • 用RelativeLayout 去 布局。
  • 使用限定符 res/layout-large/main.xml 和res/layout/main.xml 去区分屏幕的大小,针对大屏的设备,会自动加载layout-large/ 中的布局。
  • 使用smallest-width 限定符(Android 3.2 之后引入) layout-sw600dp/ 的方式。如果7寸的平板最小宽度为600dp,这样在加载的时候,小于 600dp 的去加载 res/layout/main.xml 大于 600 dp 的去加载res/layout-sw600dp/main.xml 的布局。
  • 使用布局别名的方式。(主要是解决Android 3.2  之前的布局限定方式)
  • 使用Nine-Patch 图片。


你可能感兴趣的:(Android技术篇,屏幕适配,android)