屏幕概念
l 屏幕尺寸:
物理上的大小,以屏幕对角线为准。
为了方便起见,android将屏幕大小分为四个级别(small,normal,large,and extra large)。
l 屏幕密度
特定物理尺寸大小内像素点的数量,通常使用dpi(dots per inch)。密度越低,单位尺寸内像素点越少。
为方便起见,android将实际的屏幕密度分为四个通用尺寸(low,medium,high,and extra high)。
l 方向
屏幕的方向是用户看见视图的方向。默认的设备的方向默认是不一定相同的,用户在程序运行时是可以改变方向的,例如转动设备。
l 分辨率
一个屏幕总共的像素点。当添加多屏幕支持时,应用不直接对分辨率操作,应用只要考虑屏幕大小和密度。
l 密度无关的像素(Density-independent pixel——dp)
是一种虚拟的像素单位,当你定义layout时应该使用这种单位。
详细解释:密度无关的像素相当于一个160dpi屏幕上的一像素,这个是medium级别屏幕的一个基准。运行时根据实际的屏幕密度来转化这种单位。
公式:px = dp * (dpi /160)
例如:在240 dpi的屏幕上,1dp等于1.5个物理像素。当你定义应用的UI时应该经常使用dp单位,保证你的UI适合地显示在不同的屏幕上。
支持的屏幕范围
android 1.6以后支持多种屏幕的大小和密度,反映出一个设备可以有多种屏幕的硬件配置。你可以使用android的这个特点改进用户体验达到最好的用户体验效果。
四个广义上的尺寸(small,normal,large,and xlarge)。
在3.2以后这种定义被弃用
四种屏幕密度( ldpi (low), mdpi (medium),hdpi (high),and xhdpi (extra high))
最基本的android屏幕大小和密度的是根据normal级大小和medium级别密度定义的。来源于最早的T-mobile G1,使用HVGA屏幕,当时的android只有这一种屏幕配置。
每一种屏幕大小和密度都代表着一种范围,例如,都是normal级别的两种屏幕,长宽比例也相同,但是手动测量时存在细微的差距。都是hdpi级别的屏幕可能真实px大小也存在差异。android将这些做了一些抽象,这样你可以为大多屏幕大小的设备提供UI设计。
android为这四类屏幕的大小和尺寸的分组
屏幕级别的最低配置
l xlarge 960dp x 720dp
l large 640dp x480dp
l normal 470dp x 320dp
l small 426dp x 320dp
为应对这种情况,android提供了可选资源,在运行时,android根据屏幕大小和密度选择资源。你不需要为每种界面组合都提供可选资源,android本身提供了强大的功能。
密度的独立性
提供不同密度的图片资源。不提供的话,一张图在低分辨率的显示器上会变大,高分辨率的显示器上会变小。
为使得密度的独立性,使用dp定义或者wrap_content。
怎样提供多屏幕支持
l 明确指明你使用的屏幕大小是多少
l 为不同的屏幕提供不同的layout
l 为不同的屏幕提供不同的bitmap
方法:
使用文件进行配置
<qualifier>标签
在android目录中一般的目录结构
src/
MyActivity.java
res/
drawable/
icon.png
layout/
main.xml
info.xml
values/
strings.xml
在添加可选资源的时候设定文件夹的名字
为<resources_name>-<config_qualifier>
<resources_name>目录的名字
<config_qualifier>需要配置的名字
可以有多个配置,中间用横线分隔
例如:
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
hdpi指明的是资源在目录中是为高密度的屏幕设计的。虽然资源的名字是相同的,但是android在使用时会自动寻找最适合的进行使用。
注意:使用多个属性时要按顺序添加。有一定的优先级。(Table 2)
http://developer.android.com/guide/topics/resources/providing-resources.html#table2
例:port
立着的手机
land
横着的手机
car
有底座的模式
desk
有几条规则:
l 可以有多个属性
l 属性必须按照表2的顺序添加
l 文件夹的名字不可以嵌套
l 文件夹名字都是小写的,如果你写成大写也会被在运行时转换为小写
l 每个属性的值只能有一个,例如添加两个国家支持,只能是添加两个文件夹,不可以写在一起。