android 屏幕适配理解

1. 手机屏幕要素

手机:  M2

       分辨率:1080X1920 (手机宽度和长度的像素数)

       屏幕尺寸:手机屏幕对角线长度  8寸

       屏幕密度:dpi  屏幕每英寸的像素数

                         计算公式:(1080平方+1920平方)再开平方/8寸 = 275.36 dpi

       density :  密度()   

                         android中规定 160px/英寸,就是每英寸为160px;    意味着160dpi屏幕密度: 1dp = 1px

                         所以此手机的密度为:  275.36dpi/160= 1.72 倍;  意味着160dpi屏幕密度: 1dp = 1.72px

        综上所述:当我们android开发者需要做适配时,可以获取分辨率和屏幕尺寸计算出屏幕密度,再计算出密度(即当前手机的1dp=XXpx),再根据UI给的px尺寸去给出dp值; 当UI标注高为30px时,我们用30/1.72;

       getResources().getDisplayMetrics().densityDpi 就是屏幕密度。
  getResources().getDisplayMetrics().density 就是密度, 也可以理解为1dip相当于多少个px啦。

2. 图片尺寸的适配 

       上述1中获取的是屏幕真实的密度,下列是系统标准密度,不可能针对每个真实密度去做一套配图,所以以系统标准密度为准,去作图适配;特殊的尺寸时,再做特殊适配;

       屏幕密度              标准                密度                分辨率

        120 dpi、             ldpi               0.75倍              240X320

        160 dpi(基准)  mdpi             1倍                   320X480

         240 dpi                hdpi              1.5倍               480X800

         320 dpi                xhdpi             2倍                  720X1280

         480dpi                 xxhdpi           3倍                  1080X1920

          建议在xhdpi中作图(或者xxhdpi也可以),鉴于apk的大小,一般在xhdpi中放入图片就可以,计算的简单,就是1dp=2px啊,放进drawable-xhdpi的资源文件夹中。 图片的大小就通过dp去控制,这样就可以适配各种手机了;

3.屏幕的宽高差异

        分辨率                      320X480                 480X800                720X1280与1080X1920

        屏幕宽度                      320dp                    320dp                                360dp

        屏幕宽高比                    2:3                         3:5                                    9:16

       如果想消除这些比例差异,可以通过添加布局文件来实现。一般情况下,布局文件放在layout文件夹中,如果要单独对360dp的屏幕进行调整,你可以单做做一个布局文件放在layout-w360dp中;如果你想对某个特殊的分辨率进行调整,那么你可以将布局文件放在标有分辨率的文件夹中,如 layout-854×480。

      android Mainfest中添加,支持大屏比差;做华为mate9的适配时,图片和UI匹配不上,最后发现是屏幕宽高比原因:
<meta-data android:name="android.max_aspect" android:value="2.1"/>

    Android的屏幕适配一直以来都在折磨着我们Android开发者,越来越多的手机厂商趋向于全面屏设计,比如今年出厂的 18.5:9 屏幕比例的三星 Galaxy S8 手机,前两天刚发布 18:9 屏幕比例的 OnePlus 5T 手机, 屏幕比例均超过过去常见的 16:9 比例。超大屏幕比例的设计对于 Android App 来说,存在一个屏幕适配的问题。

我们需要在 Manifest 清单文件中定义一个更大值的 android.max_aspect 属性,保证我们的 App 能够充分利用多余的屏幕空间。

       注意:如果你没有使用 meta-data 标签设置 max_aspect 属性,同时 android:resizeableActivity 属性值为 true 的话,App 默认使用的最大 aspect 默认值为 1.8(大约 16:9 的样子)。max_aspect 属性表示 App 能够支持的最大屏幕比例,官方建议我们将该值设置为 2.1 或者更高的值。

       备注: resizeableActivity 属性在 targetSDKVersion 小于 24 的应用中值为 false,其他为 true。

4.几个资源的文件夹
          在720×1280中做了图片,要让开发人员放到drawable-xhdpi的资源文件夹中,这样才可以显示正确。个人认为仅提供一套素材就可以 了,可以测试一下应用在低端手机上运行是否流畅,如果比较卡顿,可以根据需要提供部分mdpi的图片素材,因为xhdpi中的图片运行在mdpi的手机上 会比较占内存。
以应用图标为例,xhdpi中的图标大小是96px,如果要单独给mdpi提供图标,那么这个图标大小是48px,放到drawable-mdpi 的资源文件夹中。各个资源文件夹中的图片尺寸同样符合ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的规律。

    如果你把一个高2px的分割线素材做成了9.png图片,你想让细线在不同密度中都是2px,而不被安卓根据密度进行缩放,怎么办?你可以把这个分 割线素材放到drawable-nodpi中,这个资源文件夹中的图片,将按照实际像素大小进行显示,而不会被安卓根据密度进行缩放。即在mdpi中细线 是2px(2dp),在xhdpi中细线是2px(1dp)。

5.屏幕适配命名

  layout

  layout-land

  layout-port

  values-port-xhdpi

  drawable-land-xxhdpi

  values-sw600dp

6.注: 计算出实际的dpi屏幕像素,做android的屏幕适配还是要匹配android官方标准的dp去适配的,

    

例:计算出的实际dpi为401dpi,我们在android适配时以以上标准为基础,就是xxhdpi, 3倍的,1dp=3px去做屏幕适配

  

          

         

猜你喜欢

转载自blog.csdn.net/yangaiyu/article/details/84937127