android 通用屏幕适配小结

1.目录对应设备关系

ldpi: 屏幕密度为120的手机设备

mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)

hdpi: 屏幕密度为240的手机设备

xhdpi: 屏幕密度为320的手机设备

xxhdpi:屏幕密度为480的手机设备

android默认的low=120 ;Medium =160; High = 240

 

2. 程序启动图标:

LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px。

MDPI (Medium Density Screen, 160 DPI),其图标大小为 48 x 48 px。

HDPI (High Density Screen, 240 DPI),其图标大小为 72 x 72 px。

xhdpi (Extra-high density screen, 320 DPI),其图标大小为 96 x 96 px。

xxhdpi(xx-high density screen, 480 DPI),其图标大小为144 x 144 px。

 

3.桌面ICON的尺寸:5个尺寸的ICON,分别对应资源目录res下以drawable_开头的几个文件夹内。

36*36 ——->drawable_ldpi目录下
48*48 ——->drawable_mdpi目录下
72*72 ——->drawable_hdpi目录下
96*96 ——->drawable_xhdpi目录下
144*144——>drawable_xxhdpi目录下

 

4.图片尺寸:和ICON对应,分别对应资源目录res下以drawable_开头的几个文件夹内。

320*240 ——–>drawable_ldpi目录下
480*320 ——–>drawable_mdpi目录下
800*480 ——–>drawable_hdpi目录下
1280*720 ——->drawable_xhdpi目录下
1920*1080 ——>drawable_xxhdpi目录下

 

5.注意

  • 据px = dip * density / 160,则当屏幕密度为160时,px = dip

  • TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。

  • 图片放在drawable中,等同于放在drawable-mdpi中,原因为:drawable目录不具有屏幕密度特性,所以采用基准值,即mdpi

  • 图片放在某个特定drawable中,比如drawable-hdpi,如果设备的屏幕密度高于当前drawable目录所代表的密度,则图片会被放大,否则会被缩小,放大或缩小比例 = 设备屏幕密度 / drawable目录所代表的屏幕密度

  • 为了更全面的适配所有设备,我们应该提供一套针对主流屏幕密度的图片(目前为hdpi或xhdpi),其他密度通过系统自动缩放得到图片

  • import android.content.Context;
    
    public class DimenUtils {
    
        public static int spTopx(Context context, float spValue) {
            float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
            return (int) (spValue * fontScale + 0.5f);
        }
    
        public static int pxTosp(Context context, float pxValue) {
            float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
            return (int) (pxValue / fontScale + 0.5f);
        }
    
        public static int dipTopx(Context context, int dipValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (dipValue * scale + 0.5f);
        }
    
        public static int pxTodip(Context context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }
    }

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值