屏幕尺寸
屏幕尺寸指屏幕的对角线长度,单位是英寸,1英寸=2.54厘米
屏幕分辨率
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080
屏幕像素密度
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一条件变化下
屏幕尺寸越小,分辨率越高,像素密度越大,反之越小。
dp dip dpi sp px
px 像素点的单位
dip和dp是同一个意思,即密度无关像素,dpi是屏幕像素密度,假如dpi=160,那么1dip=1px,假如320dpi,则1dip=2px;
sp 与dp类似,可以根据文字大小首选项进行缩放,设置字体大小的御用单位
屏幕适配解决方法:
使用wrap_content、match_parent、weight
使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 8 的级别中称为 “fill_parent”)则会展开组件以匹配其父视图的尺寸。
weight的计算方法
View的宽度等于原因宽度加上剩余空间占比
如果每个View 的宽度设置是match_parent,假设屏幕宽度为L,那么每个View宽度也应该为L ,剩余宽度等于L-(L+L)=-L。
View1的weight=1,剩余宽度占比为1/3,所以最终宽度为L+1/3*(-L)=2/3L,View2计算方法类似。
使用相对布局,禁用绝对布局
使用限定符
1.使用尺寸限定符
如小尺寸的res/layout/main.xml
大尺寸的res/layout-large/main.xml
系统会在属于较大屏幕的设备上选择large布局。系统会在较小屏幕上选择其他布局、
但是是该布局在低于3.2的Android 设备上,会发生较大屏幕尺寸范围的问题,所以在Android 3.2版本引入其他限定符的同时引入了“最小宽度”限定符
2.使用最小宽度限定符
如:res/layout-sw600dp/main.xml
最小宽度大于等于 600 dp 的设备,系统会选择 layout-sw600dp/main.xml(双面板)布局,否则系统就会选择 layout/main.xml(单面板)布局。
但是版本低于3.2的设备不支持此技术,因此就会有一个名称为 res/layout-large/main.xml 的文件(与 res/layout-sw600dp/main.xml 一样)。但是没有太大关系,我们将马上学习如何避免此类布局文件出现的重复。
3.使用布局别名:
定义以下布局:
-
res/layout/main.xml,单面板布局
-
res/layout/main_twopanes.xml,双面板布局
res/values-large/layout.xml:
res/values-sw600dp/layout.xml
后两个文件的内容相同,但他们并没实际定义布局,他们只是将main设置成了main_twopanes的别名,由于这些文件包含large和sw600dp选择器
因此无论Android版本如何,系统都会将这些文件应用到平板电脑和电视上(版本低于3.2的平板电脑和电视会匹配large,版本高于3.2的平板电脑和电视会匹配sw600dp)
4.使用屏幕方向限定符
5.使用自动拉伸位图
支持各种屏幕密度
6.使用非密度制约像素-使用dp 而不是px