老生常谈的话题了。写下来帮助自己巩固理解记忆。
基础知识
density: The logical density of the display. 密度比例值,当前dpi/160 就对应这个值
Dip (Device-independent pixel) 同dp,可作长度单位,不同设备有不同的显示效果,
这个和设备硬件有关,在dpi(像素密度)为160dpi的设备上 1dip = 1px
Dpi (dots per inch) 每英寸的密度值,该值对应于DisplayMetrics类中属性densityDpi的值
适配方式
在values中根据需要适配的分辨率机型,在res目录下新建不同的文件夹(命名为values-xxhdpi-1920x1080,values-xhdpi-1280x720...),
写对应的dimens.xml文件
在res/values/目录下的dimens.xml文件中,我们默认1px=1dp的。可以写成<dimen name="dp_1">1dp</dimen>
那么在values-xxhdpi-1920x1080文件夹下,
因为hdpi 屏宽默认为480px. densityDpi为240.xxhdpi-1920x1080下 屏宽默认为1080px.
densityDpi为480.
在 hdpi下 1dp = 1px;
那么在xxhdpi-1920x1080下, (1080/480)/(480/240) = 9/8 dp 即对应 hdpi 中的 1dp ,dimens.xml文件中写成<dimen name="dp_1">1.12dp</dimen>
同理 在xhdpi-1280x720下,(720/320)/(480/240) = 9/8 dp 即对应 hdpi 中的 1dp,
dimens.xml文件中写成<dimen name="dp_1">1.12dp</dimen>(跟xxhdpi-1920x1080一样的)
如果在 hdpi-1920x1080下呢,套用公式即可 (1080/240)/(480/240) = 9/4 dp,
dimens.xml文件中写成<dimen name="dp_1">2.25dp</dimen>
其他不同分辨率以及density同样可以推出,不作赘述。
布局文件中使用格式:
```
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"/>
```
网友评论