关于android 开发屏幕适配的个人见解
- px
是英文单词pixel的缩写,意为像素,屏幕上的点。我们通常所说的分辨率如480X800就是指的像素。
在设计领域中,像素是用来计算数码影像的最小单位。计算机中显示的图像并非连续的线条组成,而是由许多肉眼看不见的小点组成。如果把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小点所组成,这些小点就是构成影像的最小单位“像素”。由于是最小的独立显示单位,px均为整数,不会出现0.5px的情况
- in
表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如我们经常说的手机屏幕大小有,5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是4英寸,表示手机的屏幕(可视区域)对角线长度是4 X 2.54 = 10.16厘米。
- dpi
dpi是Dots Per Inch的缩写, 每英寸点数,即每英寸包含像素个数。比如320X480分辨率的手机,宽2英寸,高3英寸, 每英寸包含的像素点的数量为320/2=160dpi(横向)或480/3=160dpi(纵向),160就是这部手机的dpi,横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。
- density
屏幕密度,density和dpi的关系为 density = dpi/160
- dp
也即dip,设备独立像素,device independent pixels的缩写,Android特有的单位,在屏幕密度dpi = 160屏幕上,1dp = 1px。
- sp
和dp很类似,一般用来设置字体大小,和dp的区别是它可以根据用户的字体大小偏好来缩放。
二、常见的解决办法
当新建一个android工程时 会出现以下几个drawable文件夹,它们分别对应不同的dpi
-
drawable-ldpi (dpi=120, density=0.75)
-
drawable-mdpi (dpi=160, density=1)
-
drawable-hdpi (dpi=240, density=1.5)
-
drawable-xhdpi (dpi=320, density=2)
-
drawable-xxhdpi (dpi=480, density=3)
市面上常见手机的分辨率
iphone分辨率
480x320 3:2
960x640 3:2
1136x640 16:9
android主流分辨率
480x320 3:2 (主分辨率) 华为C8650
800x480 5:3 (主分辨率) HTC G10
960x640 3:2 魅族MX
1280x768 5:3 (主分辨率)google nexus4
1280x720 16:9 (主分辨率)小米2s
1920x1080 16:9 (主分辨率) 三星 galaxys4
做高分辨率三套,同比缩小到相应分辨率
1920x1080 16:9
1280x768 5:3
960x640 3:2
分辨率对应DPI
"HVGA mdpi" 480x320"WVGA hdpi " 800x480
"FWVGA hdpi " 854*480
"QHD hdpi " 960*540
"720P xhdpi" 1280*720
"1080P xxhdpi " 1920*1080
常见的适配方法:为每种dpi都出一套图片资源(但是此方法为美工增加了工作量,同时增大了apk)
android 自动渲染:Android SDK会自动屏幕尺寸选择对应的资源文件进行渲染,如SDK检测到你手机dpi是160的话会优先到drawable-mdpi文件夹下找对应的图片资源,注意只是优先,假设你手机dpi是160,但是你只在xhpdi文件夹下有对应的图片资源文件,程序一样可以正常运行。所以理论上来说只需要提供一种规格的图片资源就ok了,如果只提供ldpi规格的图片,对于大分辨率的手机如果把图片放大就会不清晰,所以需要提供一套你需要支持的最大dpi的图片,这样即使用户的手机分辨率很小,这样图片缩小依然很清晰
自动渲染需要在AndroidManifest.xml设置
在中Menifest中添加子元素
android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。
相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源:
横屏竖屏目录区分
1) drawable
a) drawable-hdpi该图片即适用于横屏,也适用于竖屏;
b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源;
c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。其他同理。
2) layout
在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换
多屏幕适配的4条黄金原则
1) 在layout文件中设置控件尺寸时应采用fill_parent、wrap_content、match_parent和dp;尽量使用match_parent而不是fill——parent
具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更好,文字大小应该使用sp来定义。
2) 在程序的代码中不要出现具体的像素值,在dimens.xml中定义;
为了使代码简单,android内部使用pix为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。
3) 不使用AbsoluteLayout(android1.5已废弃) ,可以使用RelativeLayout替代;
4) 对不同的屏幕提供合适大小的图片。(屏弃)
不同大小屏幕用不同大小的图片,low:medium:high:extra-high图片大小的比例为3:4:6:8;举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra-high为96×96
使用9-patch PNG图片
使用图片资源时,如果出现拉伸,因为图片处理的原因,会变形,导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。
“上、左”定义可拉伸区域
“右、下”定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。
Android SDK中提供了编辑9-Patch图片的工具,在tools目录下draw9patch.bat,能够立刻看到编辑后的拉伸效果,也可以直接用其他图片编辑工具编辑,但是看不到效果。
屏幕级别
|
屏幕密度
|
比率(相对)
|
物理大小(英寸)
|
像素大小
|
通常的分辨率
|
|
ldpi
|
120
|
3
|
0.75
|
1
|
120
|
|
mdpi
|
160
|
4
|
1
|
1
|
160
|
320*480
|
hdpi
|
240
|
6
|
1.5
|
1
|
240
|
480*800
|
xhdpi
|
320
|
8
|
2
|
1
|
320
|
720*1280
|
xxhdpi
|
480
|
12
|
3
|
1
|
480
|
1080*1800
|
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。