Android常用屏幕适配方案简介

文章目录

      • 一、Android中PX、DPI以及DP概念
        • 1、PX(pixel 绝对单位)像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值
        • 2、DPI(dots per inch像素密度)屏幕每英寸所包含的像素数
        • 3、先来熟悉下 DisplayMetrics 中和适配相关的几个变量
        • 4、DP(Device-independent pixel,设备独立像素)可作长度单位,不同设备有不同的显示效果,在Android中dp会转换成px进行绘制,转换公式如下所示
      • 二、今日头条轻量级适配方案
        • 1、需求描述:设计师出了一张宽度为360dp的UI图,需要我们在宽度上适配不同的屏幕
        • 2、兼容突破口:屏幕适配一般都会寻找基准点,既然设计给得UI图宽度为360dp,就以宽度360dp作为基准点,根据公式:px = dp * density
        • 3、实现逻辑:每部手机px值固定,我们只需要通过px/dp动态算出density,然后布局按照宽度360dp的UI进行布局,当app页面进行渲染的时候会通过density将dp转化成px,如上不同的屏幕density不同,dp转换px也会不同就能够很好的适配不同的屏幕了
        • 4、DisplayMetrics#scaledDensity和DisplayMetrics#density设置为同样的值,从而某些用户在系统中修改了字体大小失效了,但是我们还不能直接用原始的scaledDensity,直接用的话可能导致某些文字超过显示区域,因此我们可以通过计算之前scaledDensity和density的比获得现在的scaledDensity,方式如下
      • 三、屏幕分辨率限定符
        • 1、适配原理:屏幕分辨率限定符适配需要在 res 文件夹下创建各种屏幕分辨率对应的 values-xxx 文件夹,如下图
        • 2、寻找基准点:比如设计师给出的UI是1080*1920,则以此为基准使用autolayout.jar生成不同分辨率的资源文件
        • 3、使用方法:按照UI图片使用values-1920x1080目录下的尺寸进行布局,UI设计图的px是多少,布局文件中px就使用多少
      • 四、smallest宽度限定符
        • 1、适配原理:smallestWidth 限定符适配原理与屏幕分辨率限定符适配原理一样,系统都是根据限定符去寻找对应的 dimens.xml 文件
        • 2、下载dimens:下载dimens.xml并存放在values目录下
        • 3、生成资源文件:生成values-sw384dp~values-sw1365dp
        • 4、按照设计师给出的UI图,给不同的布局文件设置不同dp
      • 五、总结本篇文章中一共介绍了三种常用的屏幕适配方案
        • 1、今日头条轻量级适配方案(只能对某一方向进行适配)
        • 2、屏幕分辨率限定符(只适用常规的手机屏幕尺寸)
        • 3、smallest宽度限定符(只能对最小宽度方向进行适配)

一、Android中PX、DPI以及DP概念

1、PX(pixel 绝对单位)像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值

2、DPI(dots per inch像素密度)屏幕每英寸所包含的像素数

Android常用屏幕适配方案简介_第1张图片

3、先来熟悉下 DisplayMetrics 中和适配相关的几个变量

  • DisplayMetrics#Density 就是下图的density
  • DisplayMetrics#densityDpi 就是下图的dpi
  • DisplayMetrics#scaledDensity 字体的缩放因子,正常情况下和density相等
    Android常用屏幕适配方案简介_第2张图片

4、DP(Device-independent pixel,设备独立像素)可作长度单位,不同设备有不同的显示效果,在Android中dp会转换成px进行绘制,转换公式如下所示

Android常用屏幕适配方案简介_第3张图片了解了px、dpi、density与dp之间的关系,更有助与我们了解屏幕适配的原理

二、今日头条轻量级适配方案

1、需求描述:设计师出了一张宽度为360dp的UI图,需要我们在宽度上适配不同的屏幕

2、兼容突破口:屏幕适配一般都会寻找基准点,既然设计给得UI图宽度为360dp,就以宽度360dp作为基准点,根据公式:px = dp * density

3、实现逻辑:每部手机px值固定,我们只需要通过px/dp动态算出density,然后布局按照宽度360dp的UI进行布局,当app页面进行渲染的时候会通过density将dp转化成px,如上不同的屏幕density不同,dp转换px也会不同就能够很好的适配不同的屏幕了

通过上面可知,只需要修改应用的density值就能很好的适配不同的屏幕
Android常用屏幕适配方案简介_第4张图片
最终开发出来的app宽度上很好的适应了不同的屏幕,但是却出现了字体大小混乱的问题

4、DisplayMetrics#scaledDensity和DisplayMetrics#density设置为同样的值,从而某些用户在系统中修改了字体大小失效了,但是我们还不能直接用原始的scaledDensity,直接用的话可能导致某些文字超过显示区域,因此我们可以通过计算之前scaledDensity和density的比获得现在的scaledDensity,方式如下

只需要在Application#registerComponentCallbacks 注册下 onConfigurationChanged
监听即可

Android常用屏幕适配方案简介_第5张图片

三、屏幕分辨率限定符

1、适配原理:屏幕分辨率限定符适配需要在 res 文件夹下创建各种屏幕分辨率对应的 values-xxx 文件夹,如下图

Android常用屏幕适配方案简介_第6张图片

2、寻找基准点:比如设计师给出的UI是1080*1920,则以此为基准使用autolayout.jar生成不同分辨率的资源文件

  • 执行命令:java -jar xx.jar width height width,height_width,height
    其中第一个width和height则上面所说的基准点1080*1920
    Android常用屏幕适配方案简介_第7张图片

3、使用方法:按照UI图片使用values-1920x1080目录下的尺寸进行布局,UI设计图的px是多少,布局文件中px就使用多少

Android常用屏幕适配方案简介_第8张图片

四、smallest宽度限定符

1、适配原理:smallestWidth 限定符适配原理与屏幕分辨率限定符适配原理一样,系统都是根据限定符去寻找对应的 dimens.xml 文件

  • 下载插件:首先下载安装ScreenMatch插件,Ctrl+Alt+S打开Plugins
    Android常用屏幕适配方案简介_第9张图片

2、下载dimens:下载dimens.xml并存放在values目录下

Android常用屏幕适配方案简介_第10张图片

3、生成资源文件:生成values-sw384dp~values-sw1365dp

Android常用屏幕适配方案简介_第11张图片

4、按照设计师给出的UI图,给不同的布局文件设置不同dp

Android常用屏幕适配方案简介_第12张图片

五、总结本篇文章中一共介绍了三种常用的屏幕适配方案

1、今日头条轻量级适配方案(只能对某一方向进行适配)

2、屏幕分辨率限定符(只适用常规的手机屏幕尺寸)

3、smallest宽度限定符(只能对最小宽度方向进行适配)

其实常用的屏幕适配方案还有许多,比如还有使用权重适配或者按照百分比适配,每种适配都有它的优缺点,这篇文章只是对一些常用的屏幕适配方案进行简单介绍。

你可能感兴趣的:(屏幕适配)