美文网首页性能优化
【适配】Android适配基础

【适配】Android适配基础

作者: dlihasa | 来源:发表于2018-09-11 17:54 被阅读12次

    简单说下各相关单位的含义

    屏幕尺寸:手机屏幕对角线的物理尺寸,1英寸=2.54cm,Android手机常见的尺寸5寸、5.5寸、6寸等。
    分辨率:手机屏幕宽和高方向上的像素点,通常称为宽x高,比如1080x1920分辨率的手机
    px:像素,屏幕上的物理像素点。
    dip:density-independent pixel,也可以写成dp,与终端上的实际物理像素点无关。
    sp:scale-independent pixel,独立比例像素,用于描述字体。
    dpi:dots per inch,每英寸的像素点数。
    density:在代码中是与标准密度(dpi=160)的一个比值。

    相关的更多介绍请看这里

    Android的尺寸属性

    首先看一段代码和输出来直观了解一下android中DisplayMetrics中的各个属性以及在随机找的两个不同机型上的取值:

     DisplayMetrics dm = getResources().getDisplayMetrics();
     Log.d("dm", "densityDpi: "+dm.densityDpi);
     Log.d("dm", "density: "+dm.density);
     Log.d("dm", "scaledDensity: "+dm.scaledDensity);
     Log.d("dm", "widthPixels: "+dm.widthPixels);
     Log.d("dm", "heightPixels: "+dm.heightPixels);
    

    某三星机的各项属性输出:


    image.png

    某小米机输出:


    image.png

    Android中的dp在渲染前会将dp转为px,计算公式:

    px = density * dp;
    density = dpi / 160;
    px = dp * (dpi / 160);
    而dpi是根据屏幕真实的分辨率和尺寸来计算的,每个设备都可能不一样的。

    我理解的是如果ui出图和手机屏幕都是按照标准来的话,dp是可以解决这种屏幕适配的问题,但是这只能是一种美好的希望。。。然而事实是:

    假设我们UI设计图是按屏幕宽度为360dp来设计的,那么在上述设备上,屏幕宽度其实为1080/(440/160)=392.7dp,也就是屏幕是比设计图要宽的。这种情况下, 即使使用dp也是无法在不同设备上显示为同样效果的。 同时还存在部分设备屏幕宽度不足360dp,这时就会导致按360dp宽度来开发实际显示不全的情况。而且上述屏幕尺寸、分辨率和像素密度的关系,很多设备并没有按此规则来实现, 因此dpi的值非常乱,没有规律可循,从而导致使用dp适配效果差强人意。

    直接上原文了:(这是一种ui设计用dp为单位进行适配的方式)
    今日头条团队的一种极低成本的Android屏幕适配方式
    根据今日头条的扩展Android屏幕适配很麻烦吗?不!太简单了。。。(持续更新)
    这个是上面的转载版本:https://blog.csdn.net/xinlangren88/article/details/80851831
    同样是基于今日头条,号称不用写一行代码:https://www.jianshu.com/p/21eadaf65207

    然后这里给出了大家认为比较好的两种适配,其中一种是头条的完善版

    相关文章

      网友评论

        本文标题:【适配】Android适配基础

        本文链接:https://www.haomeiwen.com/subject/xieugftx.html