弄懂Android手机、pad适配的dp与px

背景:设计工程师设计图稿都是以原屏幕分辨率设计,单位也是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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leefeng.top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值