android区分pad还是phone设备

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,这样就可以显示触摸版
导航键。

你可能感兴趣的:(Android)