android是通过屏幕尺寸来区分到底是pad还是phone设备的,那么android是如何知道屏幕尺寸的呢?(屏幕尺寸指屏幕对角线的长度英寸)
是通过屏幕分辨率和屏幕密度的一个公式计算得到的。
分辨率与屏幕尺寸的换算:首先要了解Android分辨率相关基础概念 

术语

说明

备注

Screen size(屏幕尺寸)

指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸

摩托罗拉milestone手机是3.7英寸

Aspect Ratio(宽高比率)

指的是实际的物理尺寸宽高比率,分为longnolong

Milestone169,属于long

Resolution(分辨率)

和电脑的分辨率概念一样,指手机屏幕纵、横方向像素个数

Milestone854*480

DPI(dot per inch)

每英寸像素数,如120dpi,160dpi,假设QVGA(320*240)分辨率的屏幕物理尺寸是(2英寸*1.5英寸),dpi=160

可以反映屏幕的清晰度,用于缩放UI

Density(密度)

屏幕里像素值浓度,resolution/Screen size可以反映出手机密度,

 

Density-independent pixel (dip)

指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi/160,也就是px = dp * (dpi / 160)

 

1、屏幕实际单位英寸像素数(lcd_density),可以通过设perporty "ro.sf.lcd_density" 来修改,一般有120,160,240,320这几种。如果没有设置,android默认为160。

2、手机像素密度(density)实际上是以单位英寸160个像素作为参考标准,用实际单位英寸像素数/参考标准(160)得到密度,主要密度有0.75,1,1.5和2,当密度为2时就表示1英寸有320个像素,Android中通过代码可以获取到屏幕的像素值和密度,根据这些值就可以反向算出屏幕的物理尺寸 。

屏幕尺寸=屏幕对角线的像素值/(密度*160)= Math.sqrt(长*长+宽*宽)/ (密度*160)

1、屏幕分辨率是从kernel的cmdline得到。
2、屏幕对角线的像素值^2 = 屏幕长^2 + 屏幕宽^2


在frameworks/base/core/java/android/util/DisplayMetrics.java和
frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp中得到各种值。

当你修改了perporty "ro.sf.lcd_density" 来设置使用phone的界面显示时,可能你的设备没有物理的导航键,你需要修改 frameworks/base/core/res/res/values/config.xml的true为true,这样就可以显示触摸版 导航键。

更多相关文章

  1. 两分钟理解Android中PX、DP、SP的区别
  2. 关于Android的一些设计
  3. Android图像处理之熔铸特效
  4. Android图像处理之冰冻效果
  5. Android屏幕像素转换
  6. android density
  7. android 拖动条改变屏幕亮度
  8. android屏幕截图
  9. Transformer Prime 变形平板:10 寸 Super IPS+ 屏幕、12 小时电力

随机推荐

  1. 构造函数在php中的使用方法(附示例)
  2. 使用 PHPStan 强化PHP代码质量
  3. php中函数参数传递的3种方式和区别(附详解
  4. php魔术方法简介
  5. PHP不适合高并发?
  6. 详解PHP中self关键字
  7. PHP去掉字符串中的“#”
  8. 分享一个生成文件层级树类
  9. PHP中如何使用PDO修改数据?
  10. Linux下查看PHP配置文件php.ini的位置