背景:设计工程师设计图稿都是以原屏幕分辨率设计,单位也是px。
获取手机屏幕的信息:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; // 宽
int height = dm.heightPixels; // 高
float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = dm.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
打印以上信息:
例子:
小米pad:屏幕密度:320dp —— > 1dp=2px,屏幕分辨率:1536*2048 —— > 768dp*1024dp
华为p8: 屏幕密度:480dp —— > 1dp=3px,屏幕分辨率:1080*1794 —— > 360dp*598dp
三星p600:屏幕密度:320dp —— > 1dp=2px,屏幕分辨率:1600*2560 —— > 800dp*1280dp
...
最后面的dp*dp就是宽*高的dp值,也就是说,整个屏幕的宽高就是那个dp值。
屏幕适配方式一、
多个dimens文件适配:把不同的dimens文件放进不同的文件夹下,能够保证不同手机,显示的控件是等比的
如果一个控件长60px那么在对应文件夹下得dimens下定义一个dimen值:
values-ldpi 对应120dp屏幕密度的手机 <span style="white-space:pre"> </span>0.75dp<span style="white-space:pre"> </span>80dp
values-mdpi 对应160dp屏幕密度的手机<span style="white-space:pre"> </span>1dp <span style="white-space:pre"> </span>60dp
values-hdpi 对应240dp屏幕密度的手机<span style="white-space:pre"> </span>1.5dp <span style="white-space:pre"> </span>40dp
values-xhdpi 对应320dp屏幕密度的手机<span style="white-space:pre"> </span>2dp <span style="white-space:pre"> </span>30dp
values-xxhdpi 对应480dp屏幕密度的手机<span style="white-space:pre"> </span>3dp <span style="white-space:pre"> </span>20dp
屏幕适配方式二、
代码适配:程序启动后获取屏幕的densityDpi值,对于特殊的控件需要动态设置大小的时候,就可以使用代码适配的方式进行。
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
个人博客版权所有,转载请注明出处。转载自:csdn oLimxing