Android屏幕适配--六大适配方法(你必须知道)
屏幕适配
u
首先阐释一些术语和概念
Ø 屏幕尺寸(screen size):实际的物理尺寸,屏幕的对角线测量。为了方便,Android把所有的屏幕尺寸分为了4个广义的大小:小、正常、大、更大。
Ø 屏幕密度(screen density):屏幕占据的物理区域所含像素的个数,通常被称为dpi(dots per inch)即每英寸的像素点数。
Ø 分辨率(resolution):屏幕上物理像素的点数。例如,有一个240px*400px的屏幕,可以理解为在这个屏幕上横着有400条线,每条线上有240个像素点。
Ø 像素(px):屏幕上的点。
Ø dip(dp):Density-independent pixel--->与密度无关的像素(下面将详细讲解)
1.图片适配
开发过程中切图越多越好吗? 图标的大小怎么切 72x72 ,48x48,96x96,144x144,192x192 一般切多少套图片? 如果能用一套图片解决问题,就一套就够了 能不用图片就不用图片,shap资源 drawable-ldpi drawable-mdpi drawable-hdpi drawable-xhdpi drawable-xxhdpi
当同名的一张图片mm.jpg ,但内容不同图片,分别放置不同的目录,手机会更加当前屏幕密度,加载不同的图片。
Android开发者在做图片适配时需要注意一下两点
1、盛放图片的控件要用dip单位来定义其长宽。
2、 最好在ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹下提供大小比例为3:4:6:8:12的图片。当然如果有质量好的.9.png图片的话,提供一个也可以。
|
2.布局适配
针对1280x720这样的屏幕做特定的ui效果
布局文件的适配,使用得比较少。
|
3.代码适配
//
要求:v,v,v,v·直鹕柚每矶任聊坏目淼?/,/,/,全部填充;高默认
int screenWidth = getWindowManager().getDefaultDisplay().
int
screenHeight = getWindowManager().getDefaultDisplay().
LayoutParams params =
new
LayoutParams((
int
) (
0.25*
screenWidth), (
int
) (
screenHeight*0.1
));
tv1.setLayoutParams(params );
params =
new
LayoutParams((
int
) (
0.5*screenWidth
), (
int
) (screenHeigh
t*0.1
));
tv2.setLayoutParams(params );
params =
new
LayoutParams((
int
) (
0.75*screenWidth
), (
int
) (screenHeight*0.1));
tv3.setLayoutParams(params );
params =
new
LayoutParams(
screenWidth
, (
int
) (screenHeight
*0.1)
);
tv4.setLayoutParams(params );
|
4.权重适配
这个不用多说
5.尺寸适配
dip转成像素 : dp*密度比 = 像素===> 每个手机的密度比不一样
屏幕密度:开根(屏幕宽的平方+屏幕高的平方)/屏幕的尺寸
|
1_尺寸基本单位
px 像素
不同设备显示效果相同
dip或者dp
device independent pixels(设备独立像素).
不同设备有不同的显示效果
,这个和设备硬件有关,
一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dip转成像素 : dp*密度比 = 像素
每个手机的密度比不一样
屏幕密度:开根(屏幕宽的平方+屏幕高的平方)/屏幕的尺寸
屏幕密度:开根(屏幕宽的平方+屏幕高的平方)/屏幕的尺寸
|
float density = getResources().getDisplayMetrics().density;
System.
out
.println(
"当前手机的屏幕密度比是:"
+density);
|
特殊的设备(平板电脑)宽度和高度的比例和手机是不一样的,密度比是没有办法实现所有设备的适配,使用dimension.xml文件独立去声明单位,并且针对特殊的设备创建一个values-分辨率目录 ,来指定设备的宽度。
|
6.百分比适配
Android5.0之后引入百分比适配
更通用的基于重封装px属性的适配: