关闭

Android屏幕的适配

85人阅读 评论(0) 收藏 举报
分类:

Android屏幕的适配

相关的术语和概念

屏幕大小(Screen size):屏幕大小指的是屏幕物理尺寸的大小,根据屏幕的对角线长度来衡量。在android中,将屏幕尺寸简单的分为small, normal, large, and extra-large几种。

屏幕密度(Screen density):在单位面积内的像素点(pixels)密度,通常是以dpi(dots per inch)来衡量的。android根据不同的dpi,把设备分为:low, medium, high, extra-high, extra-extra-high, and extra-extra-extra-high。

屏幕方向(Orientation):屏幕对用户的方向,是横向的还是纵向的。

分辨率(Resolution):屏幕上所有像素点的数量。一般在程序做屏幕适配的时候,不会直接用到这个参数,而是根据screen size 和density来调整显示。

Density-independent pixel (dp):指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)。在布局中,一般都使用dp做为单位。

支持的屏幕范围

android根据不同的屏幕大小,将屏幕分为:
small, normal, large, and xlarge.
根据不同的屏幕分辨率,可以把屏幕分为:

  • ldpi (low) ~120dpi
  • mdpi (medium) ~160dpi
  • hdpi (high) ~240dpi
  • xhdpi (extra-high) ~320dpi
  • xxhdpi (extra-extra-high) ~480dpi
  • xxxhdpi (extra-extra-extra-high) ~640dpi

它们对应的图片描素是:
这里写图片描述

dpi值的计算

dpi=2+2/线,其中的长,宽代表屏幕的实际px点,而对角线代表的是屏幕的物理inch对角线长度。

如何做到自适应屏幕大小呢

界面布局方面,需要根据物理尺寸的大小准备5套布局,layout(放一些通用布局xml文件,比如界面中顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),layout-small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之间),layout-xlarge(7-10英寸之间),但是这只是在Android3.2之前有用,在android3.2之后,引入了layout-sw n dp的表示方式,比如layout-sw600dp/表示最小屏幕有600dp大。

第二种后缀w N dp 如layout-w600dp, values-w600dp
带这样后缀的资源文件的资源文件制定了屏幕宽度的大于Ndp的情况下使用该资源文件,但它和sw N dp不同的是,当屏幕横向纵向切换时,屏幕的宽度是变化的,以变化后的宽度来与N相比,看是否使用此资源文件下的资源。
第三种后缀h N dp 如layout-h600dp, values-h600dp
这个后缀的使用方式和w N dp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用h N dp ,但这种方式很少使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。

图片资源方面,需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
Android有个自动匹配机制去选择对应的布局和图片资源。

使用配置限定符

在前面也看见了,在res/文件夹下面,可以使用:
<resources_name>-<qualifier>
这样的方式来限定资源的使用条件,其中:

  • <resources_name>is the standard resource name (such as drawable or layout).
  • <qualifier> is a configuration qualifier from table 1, below, specifying the screen configuration for which these resources are to be used (such as hdpi or xlarge).

你可以使用多个qualifier,只需要用破折号把它们连起来。
所有的qualifier列举如下:

Screen characteristic Qualifier Description
Size small Resources for small size screens.
normal Resources for normal size screens. (This is the baseline size.)
large Resources for large size screens.
xlarge Resources for extra-large size screens.
Density ldpi Resources for low-density (ldpi) screens (~120dpi).
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra-high-density (xhdpi) screens (~320dpi).
xxhdpi Resources for extra-extra-high-density (xxhdpi) screens (~480dpi).
xxxhdpi Resources for extra-extra-extra-high-density (xxxhdpi) uses (~640dpi). Use this for the launcher icon only, see note above.
nodpi Resources for all densities. These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen’s density.
tvdpi Resources for screens somewhere between mdpi and hdpi; approximately 213dpi. This is not considered a “primary” density group. It is mostly intended for televisions and most apps shouldn’t need it—providing mdpi and hdpi resources is sufficient for most apps and the system will scale them as appropriate. If you find it necessary to provide tvdpi resources, you should size them at a factor of 1.33*mdpi. For example, a 100px x 100px image for mdpi screens should be 133px x 133px for tvdpi.
Orientation land Resources for screens in the landscape orientation (wide aspect ratio).
port Resources for screens in the portrait orientation (tall aspect ratio).
Aspect ratio long Resources for screens that have a significantly taller or wider aspect ratio (when in portrait or landscape orientation, respectively) than the baseline screen configuration.
notlong Resources for use screens that have an aspect ratio that is similar to the baseline screen configuration.
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:222次
    • 积分:21
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档