当前位置:网站首页>andorid系统layout、values、drawable适配
andorid系统layout、values、drawable适配
2022-07-28 17:34:00 【Alex_designer】
andorid屏幕适配
| 密度类型 | 代表的分辨率(px) | 屏幕密度(dpi) | 换算(px/dp) | 比例 |
|---|---|---|---|---|
| 低密度(ldpi) | 240x320 | 120 | 1dp=0.75px | 3 |
| 中密度(mdpi) | 320x480 | 160 | 1dp=1px | 4 |
| 高密度(hdpi) | 480x800 | 240 | 1dp=1.5px | 6 |
| 超高密度(xhdpi) | 720x1280 | 320 | 1dp=2px | 8 |
| 超超高密度(xxhdpi) | 1080x1920 | 480 | 1dp=3px | 12 |
在Android中,规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px
首选smallestWidth
smallestWidth 限定符适配
- 屏幕分辨率限定符适配是根据屏幕分辨率的,Android 设备分辨率一大堆,而且还要考虑虚拟键盘,这样就需要大量的 dimens.xml 文件。因为无论手机屏幕的像素多少,密度多少,90% 的手机的最小宽度都为 360dp,所以采用 smallestWidth 限定符适配只需要少量 dimens.xml 文件即可。
- 屏幕分辨率限定符适配采用的是 px 单位,而 smallestWidth 限定符适配采用的单位是 dp 和 sp,dp 和 sp 是 google 推荐使用的计量单位。又由于很多应用要求字体大小随系统改变,所以字体单位使用 sp 也更灵活。
- 屏幕分辨率限定符适配需要设备分辨率与 values-xx 文件夹完全匹配才能达到适配,而 smallestWidth 限定符适配寻找 dimens.xml 文件的原理是从大往小找,例如设备的最小宽度为 360dp,就会先去找 values-360dp,发现没有则会向下找 values-320dp,如果还是没有才找默认的 values 下的 demens.xml 文件,所以即使没有完全匹配也能达到不错的适配效果。
- 无论是宽度还是高度,哪一边小就认为哪一边是“最小宽度”
- 限定符类型:
- 尺寸(size)限定符
- 最小宽度(Smallest-width)限定符
- 布局别名
- 屏幕方向(Orientation)限定符
宽高限定符适配 这种做法不推荐使用, 比如1920x1080的手机就一定要找到1920x1080的限定符,否则就只能用统一的默认的dimens文件了。而使用默认的尺寸的话,UI就很可能变形,简单说,就是容错机制很差。
1.layout-sw500dp
这里的sw代表smallwidth的意思,当你的屏幕的绝对宽度大于500dp时,屏幕就会自动调用layout-sw500dp文件夹里面的布局。
注意:这里的绝对宽度是指手机的实际宽度,与手机横竖屏无关。
2.layout-w500dp
当你的屏幕的相对宽度大于500dp时,屏幕就会自动调用layout-w500dp文件夹里面的布局。
注意:这里的相对宽度是指手机相对放置的宽度;即当手机竖屏时,为较小边的长度;当手机横屏时,为较长边的长度。
3.layout-h500dp
与layout-w500dp的使用一样,只是这里指的是相对的高度。
注意:这里的相对高度是指手机相对放置的高度;即当手机竖屏时,为较长边的长度;当手机横屏时,为较小边的长度。但这种方式很少使用,因为屏幕在相对高度上,即在纵向上通常能够滚动导致长度变化,而不像横向那样基本固定,因而这个方法灵活性差,google官方文档建议尽量使用这种方式。
实例:密度为240 尺寸为:1280x720和1920x1080 应该放在哪个适配文件夹下
Android中,规定以160dpi(即屏幕分辨率为320x480)为基准
对应的密度比为:
160 1
240 1.5
320 2
用最小做为宽度:1280x720 是720,1920x1080是1080
720/1.5 =480
1080/1.5 =720
sw480dp
sw720dp
layout 就是layout-sw720dp , 是values 就是values-sw720dp
参考:
边栏推荐
- Application of time series database in cigarette factory
- [深入研究4G/5G/6G专题-44]: URLLC-15-《3GPP URLLC相关协议、规范、技术原理深度解读》-9-低延时技术-3-非时隙调度Mini slot
- 力扣 1331. 数组序号转换
- Pytorch:交叉熵损失(CrossEntropyLoss)以及标签平滑(LabelSmoothing)的实现
- ACM warm-up exercise 3 in 2022 summer vacation (detailed)
- Pandownload revival tutorial
- Libgdx learning path 01: libgdx introduction and running tutorial
- An intern's journey to cnosdb
- 英文翻译阿拉伯语-批量英文翻译阿拉伯语工具免费
- C string to short[] method
猜你喜欢
![[filter tracking] target tracking based on EKF, TDOA and frequency difference positioning with matlab code](/img/c7/e149e35a544b7a89bbd167c45637a4.png)
[filter tracking] target tracking based on EKF, TDOA and frequency difference positioning with matlab code

VAE: understanding and implementation of variational self encoder

ICLR21(classification) - 未来经典“ViT” 《AN IMAGE IS WORTH 16X16 WORDS》(含代码分析)

Understanding of PID

英文翻译阿拉伯语-批量英文翻译阿拉伯语工具免费

Asp net MVC web development tutorial

ES6 new - arrow function

Sword finger offer II 109. unlock the password lock

三类6种地图可视化软件测评,最好用的工具居然是它

Parity rearrangement of Bm14 linked list
随机推荐
用LEX(FLEX)生成PL语言的词法分析器
6-20 vulnerability exploitation proftpd test
Jestson nano Object detection
Avoidance Adjusted Climbrate
Doxygen document generation tool
Using CPLEX to solve small-scale energy-efficient FJSP
Sudo rosdep init error: cannot download default
Pytoch: quickly find the main diagonal elements and non diagonal elements of NxN matrix
Libgdx learning road 02: draw game map with tiled
VAE:变分自编码器的理解与实现
CVPR19 - 调参干货《Bag of Tricks for Image Classification with Convolutional Neural Network》
New functions of ES6 string
这种动态规划你见过吗——状态机动态规划之股票问题(下)
R语言与数据分析实战11-数据的删除
【笔记】《启示录》:产品经理的实践经验与反省清单
[physical application] Wake induced dynamic simulation of underwater floating wind turbine wind field with matlab code
Module 8 of the construction camp
Adobe Flash player 34.0.0.92 and available version modification methods (2021-01-23
当CNN遇见Transformer《CMT:Convolutional Neural Networks Meet Vision Transformers》
C语言循环语句强化练习题