zoukankan      html  css  js  c++  java
  • android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配

    http://www.tuicool.com/articles/nuyMZb

    1 Android手机目前常见的分辨率 
    1.1 手机常见分辨率: 
    4:3 
    VGA     640*480 (Video Graphics Array) 
    QVGA  320*240 (Quarter VGA) 
    HVGA  480*320 (Half-size VGA) 
    SVGA  800*600 (Super VGA) 
    5:3 
    WVGA  800*480 (Wide VGA) 
    16:9 
    FWVGA 854*480 (Full Wide VGA) 
    HD        1920*1080 High Definition 
    QHD     960*540 
    720p    1280*720  标清 
    1080p  1920*1080 高清 
    1.2 分辨率对应DPI 
    "HVGA    mdpi" 
    "WVGA   hdpi " 
    "FWVGA hdpi " 
    "QHD      hdpi " 
    "720P     xhdpi" 
    "1080P   xxhdpi " 
    2 屏幕适配的注意事项 
    2.1 基本设置 
    2.1.1 AndroidManifest.xml设置 
    在中Menifest中添加子元素 
    android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源: 
    1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源; 
    2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理; 
    3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。 
    2.1.2 横屏竖屏目录区分 
    1) drawable 
    a) drawable-hdpi该图片即适用于横屏,也适用于竖屏; 
    b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源; 
    c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。其他同理。 
    2) layout 
    在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。 
    2.2 多屏幕适配的4条黄金原则 
    1) 在layout文件中设置控件尺寸时应采用fill_parent、wrap_content、match_parent和dp; 
    具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更好,文字大小应该使用sp来定义。 
    2) 在程序的代码中不要出现具体的像素值,在dimens.xml中定义; 
    为了使代码简单,android内部使用pix为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。 
    3) 不使用AbsoluteLayout(android1.5已废弃) ,可以使用RelativeLayout替代; 
    4) 对不同的屏幕提供合适大小的图片。 
    不同大小屏幕用不同大小的图片,low:medium:high:extra-high图片大小的比例为3:4:6:8;举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra-high为96×96。 
    2.3 使用9-patch PNG图片 
    使用图片资源时,如果出现拉伸,因为图片处理的原因,会变形,导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。 
    “上、左”定义可拉伸区域 
    “右、下”定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。 
    Android SDK中提供了编辑9-Patch图片的工具,在tools目录下draw9patch.bat,能够立刻看到编辑后的拉伸效果,也可以直接用其他图片编辑工具编辑,但是看不到效果。 
    2.4 不同的layout 
    Android手机屏幕大小不一,有480x320, 640x360, 800x480…… 
    怎样才能让Application自动适应不同的屏幕呢? 

    其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640x360、layout-800x480……所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

    总结:最好在mainifest里面添加

    <!--对于很高的分辨率,除采用相应的图片外,还需要加上如下配置,来更好的适配屏幕 --> 
        <supports-screens 
            android:smallScreens="true" 
            android:normalScreens="true" 
            android:largeScreens="true" 
            android:anyDensity="true" />

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    android从2.1版本开始drawble分为drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。

      drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:

      (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

      (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

      (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

      系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

      在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

    Aphone一般到drawable-hdpi去取图片,drawable-hdpi没有图片再到drawable-mdpi去取图片,而后再到drawable-ldpi取图片

    Apad一般到drawable-mdpi去取图片,drawable-hdpi没有图片再到drawable-ldpi去取图片

    横屏含有drawable-land- hdpi、drawable-land- mdpi、drawable-land-ldpi的区别

    Aphone一般到drawable-land-hdpi去取图片,drawable-land-hdpi没有图片再到drawable-land-mdpi去取图片,而后再到drawable-land-ldpi取图片,而后才会到drawable-hdpi去取图片,drawable-hdpi没有图片再到drawable-mdpi去取图片,而后再到drawable-ldpi取图片

    Apad一般到drawable-land-mdpi去取图片,drawable-land-hdpi没有图片再到drawable-land-ldpi去取图片,而后才会到drawable-mdpi去取图片,drawable-hdpi没有图片再到drawable-ldpi去取图片

  • 相关阅读:
    JAVA自学笔记13
    非常不错的一款打字代码效果
    诡异的python文件
    Linux 虚拟机 docker 上 搭建 python 机器学习 平台
    git无法pull仓库: refusing to merge unrelated histories
    Python
    28 Jupyter Notebook tips, tricks, and shortcuts[Re-post]
    What is the best way to calculate a checksum for a file that is on my machine?
    Building MAPI Applications on 32-Bit and 64-Bit Platforms
    Linux 查看进程 关闭进程
  • 原文地址:https://www.cnblogs.com/lteal/p/4516835.html
Copyright © 2011-2022 走看看