android屏幕适配问题

android屏幕适配问题


参考: https://blog.youkuaiyun.com/mac_lim/article/details/8928442
参考: https://blog.youkuaiyun.com/dhy270498872/article/details/8210968
参考: https://www.cnblogs.com/fengzhblog/p/3220333.html
web开发要做兼容,Android开发也抛不开类似的问题。。。。那就是要做屏幕适配。手机屏幕有各种大小,各种尺寸。有两种标准分类:
①按尺寸分:小屏幕、中屏幕、大屏幕、超大屏幕;
②按密度分:低密度(ldpi 120)、中密度(mdpi 160)、高密度(hdpi 240)、超高密度(xhdpi 320);

了解适配前先理清几个单词:
dpi:密度density的测量单位,dots per inch 每英寸内的像素数;
density:密度,1dp 占当前设备多少像素,ldpi为120,mdpi为160,hdpi为240,xhdpi为320;
dip:指定大小的单位,device independent pixels 设备独立像素;

当一张图片在不同的android设备上显示时,在屏幕占比是不一样的。
例:一张160px的图片,在480x800的屏幕上显示:
密度为:
160dpi时,占屏幕的三分之一(= 160px/480px)
240dpi时,占屏幕的二分之一(> 160px/480px)

图片如何在不同的设备上显示相同的像素数?
①为不同的设备准备相应的图片,放在对应的文件夹当中。
优点:图片不管在哪种密度的设备都很清晰细腻。
缺点:图片较多,图片制作工作量大。
②只准备一组图片放在drawable-nodpi中。
优点:图片数量较少减少图片制作工作量。
缺点:图片在不同的设备上会进行拉伸导致图片模糊不细腻。
③使用px指定图片大小。
把密度无关像素转换为屏幕像素的公式:
pixels = dip * (density / 160)
例:在dpi为240的屏幕上,1个dip等于1.5个物理像素,所以最好使用dip来定义程序界面布局。

//dip到pixel转化
Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, r.getDisplayMetrics());

dip/dp与px之间的相互转换:

public int dip2px(Context context, float dipValue){
	float m=context.getResources().getDisplayMetrics().density ;
	return (int)(dipValue * m + 0.5f) ;
}

public int px2dip(Context context, float pxValue){
   float m=context.getResources().getDisplayMetrics().density ;
   return (int)(pxValue / m + 0.5f) ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值