近日很是无聊,花了半小时简单汇总一下安卓适配相关知识,以备自己及他人参考学习,如果有错误,欢迎评论~
ldpi :240x320 ~ 120dpi
mdpi :320x480 ~160dpi--------------------标准
hdpi :480x800 ~240dpi
xhdpi :1280x720 ~320dpi-------------------720P
xxhdpi : 1920X1080 ~500dpi------------------1080P
l:m:h:x=3:4:6:8:12
dpi=对角线长度像素总数/对角线长度;
由于国产手机分辨率及尺寸杂乱,导致计算出来的dpi与google文档参数有一定出入;
dimens.xml样式引用规律:先找对应分辨率的dimens,若没有找到,则找比它小的,若还没有找到,则找默认的,如还没找到则报错(不会找比它分辨率高的)
drawable中图片引用规律:先找对应的,没有则找比它分辨率高的,再没有的话则找比它分辨率小的。
手机: 480P--------- 1dp~1.5px
720P--------- 1dp~2px
1080P-------- 1dp~3px
sp与px换算和dp与px换算基本一致,可以使用以下方法完成:
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
手机适配的方式如下:
1:尽量在xml布局文件中用线性布局,使用权重;
2:对等分屏幕,同时视图高度与宽度相同,可以通过在Java代码中控制;
eg:topWidth = (ApplicationWrapper.screenWidth - Utils.dip2px(context, 36 * 3)) / 2;
viewHolder.ivTopPic.getLayoutParams().width = topWidth;
viewHolder.ivTopPic.getLayoutParams().height = topHeight;
3:对不同手机展示不同布局的,可以通过写不同的xml布局文件
eg:
android3.0之前,适配指定分辨率,将layout文件夹做如下命名:
layout layout-1024x768 layout-1024x600 layout-1280x768
android3.0以后,需将高度减去48像素,即底部状态栏的高度:
layout layout-1024x720 layout-1024x552 layout-1280x720
横屏版本的话,中间加上land,例如: layout-land-1024x720
竖屏版本的话,中间加上port,例如: layout-port-1024x720
注意:layout这个原来的文件夹及资源一定要存在,否则会出现错误
同时在命名layout文件夹时,大数放在小数的前面,否则会报错
4:对相同布局可能边距及字体大小的相关适配可以通过在不同的dimens.xml文件中适配
eg:values-port-1280x720、values-port-800x480、values-sw480dp、values-sw600dp、values-sw800dp
注意:数值前面有sw的是针对pad版本的适配,目前国产手机追求高大上,所以屏幕越来越大比如华为荣耀X2大到7寸,所以目前手机与pad的区分越来越难;基本都是根据屏幕的宽度来区分。
5:要灵活使用.9图片
6:未完待续~
适配Pad一般根据最小屏幕宽度,sw480,sw600,sw800分别表示屏幕最小宽度为480dp、600dp、800dp;