术语与概念
屏幕尺寸:
Android的中的所有实际的屏幕尺寸分为四个广义大小:小,正常,大,超大。(small,normal,large,and extra-large)
屏幕像素密度:
屏幕的物理区域内的像素的数量,通常简称为dpi(每英寸点数)
Android中的所有实际的屏幕密度分为六个广义密度:低,中,高,超高,超超高,超超超高。 (low,medium,high,extra-high,extra-extra-high,and extra-extra-extra-high)
方向:
从用户的角度看到的屏幕方向,一般为横向或纵向,即屏幕的宽高比。
分辨率:
在屏幕上的物理像素的总数
密度无关的像素(DP)
虚拟像素单元,在定义UI布局的时候,你应当使用与密度无关的方式来表示布局尺寸或者位置。
屏幕支持的范围
Android把实际的屏幕尺寸和密度分成如下范围:
一组(四个) 广义大小:小,正常,大,超大。
一组(六个) 广义密度:
ldpi(low)-120dpi
mdpi(medium)-160dpi
hdpi(high)-240dpi
xhdpi(extra-high)-320dpi
xxhdpi(extra-extra-high)-480dpi
xxxhdpi(extra-extra-extra-high)-640dpi
解决图片适配的问题
android中同样大小的图片在不同屏幕上显示的大小是不一样的。
ppi(pixel per inch),就是每英寸的距离像素点的个数。
例如:HVGA屏就是320*480,一般是3.5寸,计算点密度为√(320^2 + 480^2) / 3.5 = 164,约等于160。
ppi越低图片显示的越大,ppi越高图片显示的越小。
创建用于不同密度可替代的位图,你应该遵循3:4:6:8:12:16 缩放比例六广义密度之间。例如你有一个位图drawable的中等密度屏幕48*48像素,所有不同大小应:
- 超大屏幕至少是960dp * 720dp
- 大屏幕至少是640dp * 720dp
- 正常屏幕至少是470dp * 320dp
- 小屏幕至少是426dp * 320dp
获取屏幕信息:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
//获取图片的高和宽
int heightPixels = dm.heightPixels;
int widthPixels = dm.widthPixels;
//密度比例
float density = dm.density;
//dpi
int dpi = dm.densityDpi;
解决布局适配的问题
解决方法:建立不同的layout文件夹,对于不同屏幕的分辨率,书写其专用的.xml文件。
多个layout文件夹在命名上有相应的规则,以分辨率480*854为例,
命名:layout-854x480
注意:
1、大数(854)必须在前,否则会报错。
2、两个数字之间的符号是小写字母"x",不是乘号。
系统会根据机器的分辨率来分别到文件夹里面找对应的布局文件。
在下方位置创建。