Android屏幕适配备忘录

   项目中,所遇到的问题最多也是最烦的恐怕就是屏幕尺寸的匹配,而后找到合适的方法匹配图片。或者根据获取到的屏幕尺寸来将某个特定的组件的大小或者显示的位置进行调整。当时费解,因为从前学习时并没有特别关注过此问题,曾经天真的一位match_parent和wrap_content这两兄弟可以陪我到天荒地老,不曾想有些时候,也是这俩好兄弟给我添得乱。项目尾声,事情变少,这些项目里困扰我很久的问题,我想和他做个了断。

   首先,不免落入俗套的开场,我要先补补自己关于Android屏幕的基础知识,什么是屏幕尺寸什么是屏幕密度什么是dp等等。看过了视频和博客之后,我也一一来陈述一遍,当做是备忘录记好了。

   屏幕尺寸——指的是手机屏幕对角线的长度。单位为英寸,1英寸 = 2.54厘米(其实,以前我一直不太明白,不过今天终于清楚了。赚了)
  屏幕分辨率——指的是手机屏幕的横纵向上的像素点数。单位为像素PX,1像素 = 1PX。一般表示方法为纵向像素数*横向像素数。比如1920*1080。
  屏幕像素密度——指的是手机屏幕中每英寸屏幕中的像素点个数。单位为dpi(dot per inch)
  计算公式 dpi = (√横向像素数^2+纵向像素数^2 )/屏幕尺寸
  像素——px。像素是Android中最基础的像素单位,通过系统获取宽高的时候,返回的具体值的单位为PX。
  密度无关像素——dp、dip(dot independent px)。在基准线(160dpi)下,1px = 1dip。

  除了上边描述的各个不同概念,还有各个不同的dpi取值范围,mdpi(120-160dpi)、hdpi(160-240dpi)、xdpi(240-320dpi)、xxdpi(320-480dpi)、xxxdpi(480-640dpi)。

  其实,了解这些基本概念之后,并没有太大的用,如果美工不懂,还是只有靠你自力更生,所以,还是要把这些不同像素密度之间转化的工具拿出进行使用。当需要在适配不同屏幕大小的时候,再来进行相应的转换操作,这样就会好很多。但还是希望多和美工沟通,要么用Vector类型图片,要么用SVG类型图片来显示,这样既不占空间,不同手机的显示效果也都是一致的。

 以下是收集到的代码,今后再遇到类似的问题时,可以通过代码来将不同分辨率下的dp,sp进行换算然后在设置控件大小,这样就能够有效的控制不同分辨率下的大小,也就能够统一比例,也方便自己在需要时得到相应的屏幕信息转化结果。
public class DimensUtil {

    public static int sp2px(Context context, float spValue) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    public static int px2sp(Context context, float pxValue) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    public static int dip2px(Context context, int 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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值