概念
屏幕尺寸:屏幕对角线的长度 单位英寸 1英寸= 2.54厘米(约)
屏幕分辨率:屏幕横纵向上的像素点数 单位px 1px=1像素 一般以纵向像素* 横向像素表示 如: 1920*1080
屏幕像素密度(DPI): 每英寸上的像素点数 单位 dpi (dot per inch) 与屏幕尺寸和屏幕分辨率有关
计算方式:
屏幕尺寸 4.95inch 分辨率为1920 * 1080
DPI = Math.sqrt(1920^2 + 1080^2) /4.95
什么是dp dip dpi sp px ? 以及他们之间的关系?
px 构成图像的最小单位
dp = dip(density independent pixels) 密度无关像素
以160dpi为基准 1dp = 1px
如果像素密度为 240dpi 那么 1dp = 240/160 = 1.5px
sp (scale independent pixels) 可以根据文字大小首选项进行缩放 推荐使用 12sp 14sp 18sp 22sp 来作为字体大小 并且不要使用奇数 否则的话有可能造成精度的丢失
什么是mdpi hdpi xdpi xxdpi?以及他们之间的关系?
名称 | 像素密度范围 | 图标尺寸 | 比例 |
---|---|---|---|
mdpi | 120 ~160dpi | 48*48px | 1 |
hdpi | 160~240dpi | 72*72px | 1.5 |
xhdpi | 240 ~ 320dpi | 96*96px | 2 |
xxhdpi | 320 ~ 480dpi | 144*144px | 3 |
xxxhdpi | 480 ~ 640dpi | 192*192px | 4 |
ldpi比较罕见了 不做考虑
解决方案
支持各种屏幕尺寸
weight
当我们把button 的width 修改成match_parent后效果变成
这是因为 weight 计算出的宽度 = 原来的宽度 + 剩余空间所占百分比的宽度
定义 屏幕宽度=L
button1 宽度 = L + (L- 2L)* 1/3 = 2/3L 同理 button2 宽度= 1/3L
使用限定符 加载不同布局
尺寸限定符 layout-large (android 3.2 之前)...
最小宽度限定符 layout-sw600dp (android 3.2 之后 sw = small width 最小宽度 不区分宽高, 既 长或者寛最小的那个 在600dp以上)
布局别名限定符 见下图
屏幕方向限定符 values-sw600dp-land/layouts.xml 内容同布局别名
setcontentview(R.layout.main) 设置的时候需要使用 别名 而不是布局的名称
使用.9 图
左边 和上边的交叉举行区域是 可伸缩区域
右边 和 下边的交叉区域为内容区域(边距间隔 实际上为我们的控件设置的padding )
支持各种屏幕密度
使用非密度制约像素
即使用sp dp等单位
提供备用位图
建议为各个分辨率分别提供图片
如果较大的图片放到m资源文件里面 app运行在xx分辨率的手机上 则图片会被拉伸 加载图片会被放大,内存占用会增大3*3=9倍(m:xx = 1: 3)
实施自适应用户界面流程
确定当前布局
根据当前布局做出响应
重复使用其他活动中的片段
处理屏幕配置变化