• Android 屏幕适配


    前言

    手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下

    单位理解

    首先让我们先来看看关于手机所用到的单位

    真实物理尺寸单位:

    mm:表示毫米,是屏幕的物理尺寸。

    in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128厘米.

    pt:表示一个点,是屏幕的真实物理尺寸,常用于印刷。大小为1英寸的1/72. 在Photoshop 上, 默认设置是72像素/英寸, 所以在这种情况下,1pt = 1px

    抽象单位

    px:表示屏幕实际的象素, 就是屏幕上一个一个的点,例如,320*480的屏幕在横向有320个象素,在纵向有480个象素;像素并不能表示真实的尺寸,一个像素点尺寸有可能很大(例如在投影仪的屏幕上),也有可能很小(如在手机上)。所以在尺寸不变的情况下分辨率越高的的手机像素点尺寸越小。

    dip:逻辑长度单位,也写作dp, 他两都是一个意思。它Android 自己抽象出来的单它与像素无关,与屏幕密度(下面解释)无关,但是会根据屏幕的密度(density(一英尺标准160个点))进行缩放。在 160 dpi 屏幕上,1dp=1px=1/160英寸,随着密度变化,对应的像素数量也变化,但并没有直接的变化比例

    dp:同dip,是其简写。

    densityDpi: 屏幕密度,对应于PC领域的DPI, 也就是一英寸里有多少个像素。标准的是160, 所以在density=160时,1dp = 1px, density=240时, 1dp = (240/160) px = 1.5px.

    density:上面的比例因子1.5 就是density

    sp:这个用于Android 的字体大小,sp除了与密度无关外,还与scale无关,其实跟pt的含义也是类似的,也是可以表达真实的物理尺寸,只是它适用在手机上,指的是标准情况(density=160)下一个“点”的大小。 (160sp)  = (一英尺) = (72pt) 所以  1sp = (72/160)pt

    注意:如果屏幕密度为160,1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

    简单认识

    练习布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">
    <TextView
    android:layout_width="50mm"
    android:layout_height="50mm"
    android:background="#789789"
    android:gravity="center" />
    </LinearLayout>

    在4英寸(480 X 800)手机上面运行的时候效果图(左)              6英寸(1440 x 2560)(右)

    FAM(6KF}LG{~W[]%VV5$B8I                                O4M}I[I)YMH}UP{7W@DI1R4

    从效果图上可以看出他们与手机的具体尺寸有关

    注意:同理通过实验可以得知当单位为 mm、in、pt的时候,都是具体的物理尺寸,在不同的手机上面大小一样,有多余就会超出屏幕,不会缩放,与像素密度无关。

    当设置单位为 px的时候

    <TextView
    android:layout_width="400px"
    android:layout_height="400px"
    android:background="#789789"
    android:gravity="center" />

    在4英寸(480 X 800)手机上面运行的时候效果图(左)              6英寸(1440 x 2560)(右)

    image                    image

    可以看出宽度和手机的横向像素(我们常说的分辨率)有关  1px = 1个像素

    <TextView
    android:layout_width="300dp"
    android:layout_height="300px"
    android:background="#789789"
    android:gravity="center" />

    在4英寸(480 X 800)手机上面运行的时候效果图(左)              6英寸(1440 x 2560)(右)

    image     image

    可以看出 android系统对 dp单位进行了缩放,简单的说像素(分辨率)越大,1dp 所拥有的像素就越多,我们可以把屏幕密度  density=160 当成一个android内部转换基准

    综上所述:在屏幕适配的时候尽量使用dp作为单身。

  • 相关阅读:
    unittest详解(二) 跳过用例的执行(skip)
    Selenium获取input值的两种方法:WebElement.getAttribute("value")和WebElement.getText()
    python 函数参数的传递(参数带星号的说明) 元组传递 字典传递
    获取当前运行函数名称和类方法名称
    python中datetime模块中strftime/strptime函数
    面试题
    H5测试-缓存机制
    cp命令
    Java面试
    名词解释。。
  • 原文地址:https://www.cnblogs.com/yishujun/p/5438796.html
Copyright © 2020-2023  润新知