`
wjlgryx
  • 浏览: 298910 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 密度转换

阅读更多
Android屏幕密度(Density)和分辨率的解释操作系统 2010-11-17 09:25:58 阅读128 评论0   字号:大中小 订阅
HVGA屏density=160;QVGA屏density=120;WVGA屏density=240;WQVGA屏density=120
density值表示每英寸有多少个显示点,与分辨率是两个概念。

不同density下屏幕 分辨率信息,以480dip*800dip的WVGA(density=240)为例

density=120时 屏幕实际分辨率为240px*400px (两个点对应一个分辨率)
状态栏和标题栏高各19px或者25dip
横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip
竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip

density=160时 屏幕实际分辨率为320px*533px (3个点对应两个分辨率)
状态栏和标题栏高个25px或者25dip
横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip
竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip


density=240时 屏幕实际分辨率为480px*800px (一个点对于一个分辨率)
状态栏和标题栏高个38px或者25dip
横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip
竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip


apk的资源包中,当屏幕density=240时使用hdpi标签的资源
当屏幕density=160时,使用mdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源。
不加任何标签的资源是各种分辨率情况下共用的。
布局时尽量使用单位dip,少使用px
这是我最新的理解,请大家指正错误之处。

屏幕             宽度          高度           尺寸              大小        密度      
                                                                           
          Type           (Pixels)     (Pixels)   Range (inches)    Size    Group
                                                                          
          QVGA             240          320        2.6 - 3.0         Small       Low
          WQVGA         240          400        3.2 - 3.5         Normal     Low
          FWQVGA       240          432        3.5 - 3.8         Normal     Low
          HVGA             320          480        3.0 - 3.5         Normal     Medium
          WVGA           480          800        3.3 - 4.0         Normal     High
           FWVGA         480          854        3.5 - 4.0         Normal     High
          WVGA           480          800        4.8 - 5.5          Large      Medium
          FWVGA         480          854         5.0 - 5.8         Large      Medium

你可以从DisplayMetrics中取得有关展示的信息。
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
虽然Android不会使用直接的像素映射,它使用了独立的像素密度量化值,然后扩展实际的屏幕尺寸到这些独立的手工量化值。因此,密度的属性将是那些常量之一(120,160,或240 dpi)。
如果您需要的实际密度(对于一个OpenGL应用程序也许)你可以分别从横向和纵向得到它的xdpi和ydpi属性密度

这段代码应该可以:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //320
int height = dm.heightPixels; //480
获取dpi的代码:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// will either be DENSITY_LOW, DENSITY_MEDIUM or DENSITY_HIGH
int dpiClassification = dm.densityDpi;
// these will return the actual dpi horizontally and vertically
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics