概述
- Android屏幕尺寸过于繁杂,为了优化用户体验,屏幕适配显然必不可少。
- 基础概念,解决方案。
基础概念
1. 屏幕的尺寸、分辨率、像素密度
尺寸: 屏幕的对角线长度,单位英寸,1英寸 = 2.54厘米
分辨率: 在横纵向上的像素点数,单位px,1px = 1个像素点
像素密度: 每英寸上的像素点数,单位dpi
像素密度和尺寸、分辨率有关
例:尺寸 = 4.95inch , 分辨率 = 1920 * 1080 , dpi = ?
dpi = √(1920²+1080²)/4.95 = 445
2. px、dp、dip、dpi、sp
px: 构成图像的最小单位,通常Android原生API返回的都是px,如获取屏幕的宽高
dp/dip: 密度无关像素,以160dpi为基准,1dp = 1px
sp: 设置文字大小的单位,谷歌推荐使用12sp以上,尽可能不使用奇数或小数,否则将导致精度的丢失
3. mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi
mdpi: 120dpi ~ 160dpi
hdpi: 160dpi ~ 240dpi
xhdpi: 240dpi ~ 320dpi
xxhdpi: 320dpi ~ 480dpi
xxxhdpi: 480dpi ~ 640dpi
解决方案
1. 使用wrap-content/match-parent/weight
weight计算方式:最终长度 = 原长 + 剩余长度所占百分比的长度
例:屏幕宽为L,2个btn水平放置,btn1的weight=1,btn2的weight=2
(1)设置btn的宽度为match_parent
btn1 = L + (L - 2L) * 1/3 = L - 1/3L = 2/3L
btn2 = L + (L - 2L) * 2/3 = L - 2/3L = 1/3L
(2)设置btn的宽度为0dp
btn1 = 0 + (L - 0) * 1/3 = 1/3L
btn2 = 0 + (L - 0) * 2/3 = 2/3L
2. 集成 Android-percent-support 库,以百分比的形式实现不同屏幕尺寸的适配
3. 使用限定符,主要实现手机和平板的单面板和双面板显示
1. 最小宽度限定符
res/layout/main.xml 常规
res/layout-sw600dp/main.xml 最小宽度为600dp
2. 屏幕方向限定符
res/values-sw600dp-land/layouts.xml 水平方向
res/values-sw600dp-port/layouts.xml 竖直方向
4. 使用自动拉伸位图 --- .9图
- 左上黑点 --- 可拉伸区域
- 右下黑点 --- 内容区域,通常为文字显示区域