一、手机适配的概念:
1.使android应用程序适用于不同的国家语言、型号、尺寸和SDK版本等手机环境中,其主要功能和界面风格保持不变。
2.手机适配的重要性: 介于国内的繁杂的手机种类、不同屏幕尺寸和不同的版本,对于一款大众通用的应用,
必须要做适配,这是一项非常重要且繁锁的工作,便也是一件非常有意义的事情。
3.友盟 可以知道最新的统计数据,然后知道需要适配的机型和屏幕分辨率。
二、屏幕尺寸:
屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米。
比如常见的屏幕尺寸有:2.4、2.8、3.5、3.7、4.2、4.7、5.0、5.5、6.0等
三、屏幕分辨率:
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。
一般以横向像素数*纵向像素数 表示,如1960*1080
常见的屏幕尺寸:480*800,720*1280,320*480,480*854,540*960,1080*1920
四、屏幕像素密度(dpi):
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。
屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
一英寸里面有160个像素,这个屏幕的像素密度就是160dpi。
那么,如何计算??—分辨率分别平方在进行开根号,最后在除以屏幕尺寸
五、像素 – px
我们应该是比较熟悉的,前面的分辨率就是用的像素为单位,大多数情况下,
比如UI设计、Android原生API都会以px作为统一的计量单位,像是获取屏幕宽高等。
六、独立像素密度–dp
dp:Density-independent pixel (dp)独立像素密度。标准是160dip.即1dp对应1个pixel,
计算公式如:px = dp * (dpi / 160),屏幕密度越大,1dp对应 的像素点越多。
上面的公式中有个dpi,dpi为DPI是Dots Per Inch(每英寸所打印的点数),也就是当设备的dpi为160的时候1px=1dp;
七、sp
即scale-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。
八、手机适配的简要描述:
适配主要分三个方面:
①语言适配;
②屏幕适配;
③SDK平台适配;
首先,语言的适配 主要是符合不同国家之间的语言;
重点是 屏幕适配 ,屏幕适配主要从屏幕大小、布局、图片入手。
在适配不同的尺寸的时候
1.使用”wrap_content” and “match_parent”和widget,最好不用固定大小
2.使用相对布局设计复杂的UI界面;
3.在使用.9图片时要注意:作用:9patch图片的作用就是在图片拉伸的时候保证其不会失真。
所以我们使用.9图片,让图片在指定的位置拉伸和在指定的位置显示内容,这样图片的边边角角就不会出现失真了。
图片有四条黑线,右、上这两条黑线主要是负责拉伸边框;左、下则负责内容显示区域的拉伸;
4.布局中多使用权重,少用固定的数据设置尺寸;
5.我们还可以选择百分比布局
(注:在6.0以上我们还要考虑权限的设置)
九、图片加载到项目中的常见处理和考虑:(缓存,压缩)
1.二次采样:
options它是一个图片采样的参数,在第一次采样的时候只采样宽、高,而不采样具体的bitmap,取出图片的宽高:
int oldWidth = options.outWidth;
int oldHeight = options.outHeight;
计算出宽高比,
//把比例值设置给采样的参数。
//可能会使得图片发模糊,但是节约内存
options.inSampleSize=ratioHeight>ratioWidth?ratioHeight:ratioWidth;
//不会造成图片模糊,但是消耗内存
options.inSampleSize = ratioHeight < ratioWidth ? ratioHeight : ratioWidth;
第二次采样开始采样具体的bitmap,
//为第二次采样做准备,不采样边界
options.inJustDecodeBounds=false;
//设置像素点的格式(有ARGB_8888,ARGB_4444,ALPHA_8)相比较ARGB_8888,图片效果差不多,但更加节省内存。
options.inPreferredConfig= Bitmap.Config.RGB_565;
//把第二次采样的结果返回。
return BitmapFactory.decodeResource(res,id,options);
2.三级缓存:
内存,本地,网络
假设一个 ImageView 想显示一张图片,于是去内存中寻找图片,没找到,去sd卡中寻找,
没找到去网络中寻找,网络中找到了,放在sd卡上,再放到内存里,再显示出来。
ImageView 又想显示这张图片,于是去内存中寻找,找到了,直接显示出来。
ImageView又想显示这张图片(程序退出后再次进来),于是去内存中寻找,
没找到,去sd卡中寻找,找到了,放到内存里,再显示出来
---------------------------------
理论上,所有的图片都可以放入我们的三级缓存结构中。
但是在实际开发当中,并不是所有的图片都放入到我们的三级缓存结构中。
静态页面就有的页面结构的图片,这些图片一般不参与三级缓存。
三级缓存里放的都是和应用内容有关的动态变化的图片。
三级缓存+二次采样的优势:
大幅度减少OOM(Out of Memory)的出现。减少程序崩溃的可能性。
节省流量,请求过的图片就会在本地保存,再次使用只需要本地读取,不需要使用网络流量。
页面加载图片的速度大幅度提升,这使得如listview这样的控件滑动起来更加流畅。