1.sw的值是怎么计算得来的
sw = width * DisplayMetrics.DENSITY_DEFAULT / densityDPI
width是指屏幕的宽度
DisplayMetrics.DENSITY_DEFAULT是指google的标准值,一般是160
densityDPI是指屏幕密度(每寸像素数)
计算方法如下:
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
int screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)
int screenHeight = dm.heightPixels;
2.sw的值是如何适配的
sw是指smallest width,就是说最小限度,如你的手机sw计算结果是320,你的资源配置有drawable-sw320dp,drawable-sw600dp,drawable-sw720dp,那么将适配到drawable-sw320dp;如果你的手机sw计算是640,那么将适配到drawable-sw600dp
下面列出可用的资源值修饰符:
1.Mobile Country Code(MCC 移动国家编码) 和 Mobile Newwork Code(MNC 移动网络编码)
国家和可选择的网络取决于你当前所使用的SIM卡,MCC:mcc+3个代表国家的数字编码,MNC:mnc+2个代表网络的数字编码,举个例子:mcc234-mnc20,你可以找到这些编码在http://en.wikipedia.org/wiki/MobileNetworkCode.
2.语言和区域
语言根据ISO 639-1 指定2个小写字母作为代表,紧接着可选择的区域先以r开头(region)然后根据ISO 3166-1-alpha-2 语言编码,也是2个字母不过是大写,还是举个例子吧:
en(英语),en-rUS(美国英语),en-rGB(GB不知道是哪个国家~。~,大家可以去查找通过维基百科)
3.最小的屏幕宽度
以sw<Dimention value>dp的格式(比如sw600dp,sw320dp…)来指定最小的设备尺寸(宽和高)。那为什么说是最小屏幕宽度?考虑到横竖屏,实质就是宽高的较小值。
用在提供多个布局,安卓选择最接近但是不超过当前屏幕尺寸。
4.有效的屏幕宽度
以w<Dimention value>dp 来表示最小的设备屏幕宽度,比如:w600dp,w320dp,w720dp等,同样也是为了支持多个布局选择,不同于最小的屏幕宽度,有效的屏幕宽度
它跟当前的屏幕宽度做对比(比如当前是横屏的屏幕宽度),安卓选择最接近但是不超过当前屏幕尺寸。
5.有效的屏幕高度
与有效的屏幕宽度类似,表示方法以h<Dimension value>dp.
6.屏幕尺寸
实用大致对照表:
屏幕 宽度 高度 尺寸 大小 密度
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
大约 2~3 inch 为 small, 3~4 inch 为normal,4~6inch 为large, 大于6为xlarge
因为每个屏幕类型都有不同的尺寸(比如QVGA可能有2~3个尺寸),在平板电脑里更常见,比较好的方式是用前面提到的最小的屏幕宽度和有效的屏幕宽度(高度)来更精确的指定,安卓在检测layout的修饰符,会优先考虑后者。
7.屏幕的方向
port(portrait)、land(landscape)、square(square)
8.Dock Mode 所谓的底座模式?
car(行车模式)、desk (断开底座)
9.Night Mode
这个用来指定是否是夜间模式,night或者notnight,以此我们可以修改一个theme或者color theme来达到效果
10.屏幕像素密度(dpi)
最佳实践方式:给ldpi(120dpi),mdpi(160dpi),hdpi(240dpi),xhdpi(320dpi) 都指定对应的图片资源。
然而你也可以指定nodpi表示不去适配dpi。同样安卓也是选择最接近当前设备dpi的Drawables文件夹。
11.触屏类型
notouch、stylus、finger
12.键盘有效性
One of keysexposed, keyshidden, or keyssoft.
13.键盘输入类型
One of nokeys, qwerty, or 12key.
14.导航键有效性
One of navexposed or navhidden.
15.UI导航类型
nonav,dpad,trackball,wheel
16.平台版本
target API Level, 以v<API level> 比如v7. 用来限制资源只能跑在指定API或者更高的设备上。
你可以为任何资源指定多个修饰符,然后以- 分开,任何混合写法都是支持的,但是只能是上面列出的修饰符,还有一点就是每种修饰符只能出现1次。