1.什么是density

  1)density

  density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕分辨率大时,density就大,屏幕小时,density就小,通常

  屏幕实际分辨率为240px*400px时,density=120

  屏幕实际分辨率为320px*533px,density=160

  屏幕实际分辨率为480px*800px,density=240

  2)分辨率

  是整个屏是多少点,比如800x480,它是软件的显示单位

  3)从Android1.6版本开始支持density(对应API Level 4)

  用于解决应用在屏幕大小不同的硬件上正常显示的问题

  2.相关代码及设置

  1)AndroidManifest.xml

  <supports-screens android:anyDensity="true"/>

  <uses-sdk android:minSdkVersion="4"></uses-sdk>

  这个参数在API Level 4也就是SDK 1.6以后才启用的,而且1.6版本的API Level 4的应用默认值就是True

  2)资源目录名(android 2.0以后)

  res/xxx-hdpi当density为240时,使用此目录下的资源

  res/xxx-mdpi当density为160时,使用此目录下的资源

  res/xxx-ldpi当density为120时,使用此目录下的资源

  res/xxx不常后缀,为默认设置,同xxx-mdpi

  3)资源单位(xml文件中定义大小的单位)

  a)dp=dip=dx (Density independent pixel)

  基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,所以一个dp是160dpi屏幕上的一个点。
公式:pixels = dips * (density / 160).

  b)px

  px指软件的单位点,设备相关的点

  c)具体使用

  i.布局时尽量使用单位dip,少使用px

  若使用px,如果设某控件大小400x400px,在800x480上显示正常,而在533x320的屏上就超出屏幕了

  若使用dp,如果设某控件大小为160x160dp,就可以通过从系统中取density来算出真正的大小,比如在800x480屏的density设为240,而533x320屏的density设为160,借以下公式计算

  pixels = dips * (density / 160)

  在800x480在屏中显示240象素,而在533x320的屏中显示为160象素,控件在屏中显示的比例是一样的。

  ii.内部的处理过程分为三步:

  取screen中其它元素,转为应用的值,计算应用各控件位置,然后再转成800x480以供真正显示

  若res-xxx不存在,则读取res有的资源,然后对其做相应缩放

  3.实现density的关键源码

  1)BitmapFactory.java(用于缩放图片)

  2)ComptibilityInfo.java(用于位置计算)

转载:http://moonskyfox.iteye.com/blog/834010

更多相关文章

  1. android 官方文档阅读记录-多屏幕适配
  2. Android评论布局,针对TextView换行和与其他空间对齐的实现
  3. Android(安卓)中状态栏(屏幕顶部)消息的显示 Notification
  4. 谈谈Android中的SurfaceTexture
  5. Android百度地图开发(五)公交线路详情搜索、多条线路显示
  6. 图片裁剪问题
  7. 2012-06-13 16:50 Android限定EditText的输入类型为数字或者英文
  8. Android获取屏幕宽度高度并动态设置控件宽度,比例等
  9. activity介绍和值的传递(寒假学习2)

随机推荐

  1. 04. SpringCloud实战项目-安装Docker
  2. 详解Java应用程序中的内存泄露是如何发生
  3. 05. SpringCloud实战项目-Docker安装mysq
  4. 12. SpringCloud实战项目-搭建管理后台
  5. 13.SpringCloud实战项目-自动生成前后端
  6. 14.SpringCloud实战项目-自动生成前后端
  7. 阿里云ECS服务器共享标准型S6和突发性能
  8. Windows如何安装mysql数据库!
  9. 15.SpringCloud实战项目-生成所有微服务
  10. 徒手开发一个迷你版本的tomcat服务器