看了郭霖大神的屏幕适配 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 图片。


更多相关文章

  1. Android界面布局基本知识简述
  2. Android布局属性解析
  3. android 布局文件属性说明
  4. 相对布局的常用属性
  5. Android SeekBar自定义使用图片和颜色显示
  6. android页面布局
  7. RecyclerView item imageview 图片宽高自适应
  8. Android软键盘弹出,布局没有上移的解决办法

随机推荐

  1. Android通过url获取bitmap图片问题
  2. 【转】有关Android线程的学习
  3. Android初学者入门 从入门到精通
  4. Android混合开发-(Android与Web的交互)
  5. Android安全机制(2) Android Permission权
  6. Android 匿名共享内存Java接口分析
  7. Android 安全机制(1)uid 、 gid 与 pid
  8. 无废话Android之android下junit测试框架
  9. 【雨松MOMO】Android 软件开发与游戏开发
  10. android通过NFC读取卡号