关于android 开发屏幕适配的个人见解

一、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,能够立刻看到编辑后的拉伸效果,也可以直接用其他图片编辑工具编辑,但是看不到效果。

    关于图片的制作:

    1、关于设计:

    设计图先定下一个要设计的尺寸,而且尽量采用在目前最流行的屏幕尺寸(比如目前占屏幕比重比较多的是480系列,也即是480*800或者400*854,下面的图标制作也在次基础上进行比例的换算)上设计。

    先了解一下屏幕的级别:


    屏幕级别

    屏幕密度

    比率(相对)

    物理大小(英寸)

    像素大小

    通常的分辨率

    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

    说明:

    屏幕级别:

    注意屏幕级别是按照密度分级,和像素没有关系。如果非要让密度和像素扯上关系,则需要一个参照系,android使用mdpi级别作为标准参照屏幕,也就是说在320*480分辨率的手机上一个密度可以容纳一个像素。然后其他密度级别则在此基础上进行对比。如果理想情况下,480*800的屏幕一个密度可以容纳1.5个像素。

    物理大小:

    单位是英寸而不是像素,也就说一个英寸在任何分辨率下显示的大小都是一样的,但是像素在密度不同的手机里面显示的实际的大小是不一样的(这就是为什么android手机需要适配的原因)。

    然后就是重点。

    假设1像素在160密度下显示1英寸,则1像素在240密度基础上显示大约0.67英寸,在320密度下显示0.5英寸。于是就出现一种情况,在电脑上的一个像素,在不同的手机上看实际的大小不一样。那么怎么让“设计效果”在不同的手机上看起来显示的区域一样呢?

    还是假设一个像素在160密度下的显示在一个密度内,也假设就是一英寸。那么需要几个像素才能在240密度级别下显示在一英寸范围内呢?答案是1.5个像素(根据上图的比率换算)。

    了解了这个关系,接下来就是图标的制作。

    2、关于切图。

    关于切图有几个建议:

    第一,长宽最好是3的倍数(根据android的推荐logo图标的大小是48(mdpi),72(hdpi),96(xhdpi)得出的最小公约数)。

    第二,长宽最好是偶数。因为奇数在进行等比压缩的时候可能有问题。

    第三,根据上面两条,如果长宽是6的倍数最理想。

    第四,如果可以拉伸而不改变设计意图的情况下,比如纯色背景,则使用android的9path工具制作成.9的图片。

    3、关于图标的适配。

    然后接下来的一切就和设计稿没什么关系。在切好图的基础上,根据屏幕密度、像素和实际大小的比例关系。假如设计司在480*800的分辨率下做好了设计图,并且切好图,如果你需要适配720*1280屏幕,该怎么做?根据比例,他们的关系是2:3,于是你需要按照1.5倍比例制作图标,比如你在480*800的设计稿上切下来一个20*20像素的图,那么你就需要制作一个等比放大成30*30像素的图标,这样同一个图标在480*800的屏幕和720*1280的屏幕上显示的实际大小才一样。同理,如果你需要适配xxhdpi则需要在20*20的基础上制作一个等比放大成40*40像素的图标。

    4、关于图标的目录,480*800切下来的图我们放在drawable-hdpi目录下,按照2:3放大的图标放在drawable-xhdpi目录下,按照2倍放大的图标放在drawable-xxhdpi目录下。

    android会根据手机的密度优先查找对应的目录的资源,

    比如408*800分辨率下的手机如果密度是160,则自动加载drawable-hdpi这个目录下的图标,

    如果720*1280密度是240的手机自动加载drawable-xhdpi这个目录下的图标。如果没有这个文件夹,则查找和240最接近的对应密度文件夹。

    三、其它

    接下来要说的估计会让你失望,根据上面的步骤也不能完全解决适配的问题,只能是大概适配,而就算根据上面的步骤大概适配了,实际在手机上的效果也有出入。

    比如魅族MX3的分辨率是1080*1800,标准情况下密度是480,但是他的密度大约是524,和480接近,也就是会查找drawable-xxhdpi这个资源下的文件。也就是说你在480*800分辨率下切图然后按两倍放大的图标在这台手机上显示的效果还是比实际的小。

    而另一个要说的问题是540*960或者640*960,他们的密度很可能是或者接近240也可能是320。于是在480*800的设计稿上切下来的图并且进行的适配制作,在这些手机上显示的实际大小也可能或大或小

时间: 2024-08-19 08:41:31

关于android 开发屏幕适配的个人见解的相关文章

Android开发屏幕适配方案

Android屏幕适配方案总结 日常开发中,难免遇到屏幕适配的方案,网上也有很多方案,在这里本人只是做一个总结,以免日后使用 单位的概念 pt(point):磅,一个标准的固定长度单位,大小为1/72英寸,主要用于印刷与平面设计.1英寸=2.54厘米=72磅 1pt=0.03527cm px(pixel):像素,组成屏幕图像的最小点,一个相对大小单位.同尺寸屏幕中像素越小越多,代表屏幕分辨率越高,反之越高. 1pt=(ppi/72)*px 屏幕尺寸(screen size):屏幕物理尺寸,指屏幕

Android开发屏幕适配知识点

1.了解几个概念 (1)分辨率.分辨率就是手机屏幕的像素点数,一般描述成屏幕的"宽×高",安卓手机屏幕常见的分辨率有480×800.720×1280.1080×1920等.720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素. (2)屏幕大小.屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位.比如某某手机为"5寸大屏手机",就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米. (3)密度(dpi,dots per inch:或

[转]android – 多屏幕适配相关

1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).android把屏幕分为以下4种:small,normal,large,extra large.怎么判断? 屏幕密度(Screen Density) -  一 块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点).相比起medium.high屏幕密度的设备,在一块确定大小的屏幕区域l密度为 low的屏幕拥有的像素更少.android把屏幕密度分为4种:low,me

Android实习生 —— 屏幕适配及布局优化

为什么要进行屏幕适配.对哪些设备进行适配?在近几年的发展当中,安卓设备数量逐渐增长,由于安卓设备的开放性,导致安卓设备的屏幕尺寸大小碎片化极为严重.从[友盟+]2016年手机生态发展报告H1中看截止16年手机分辨率使用情况:Android设备720p和1080p是主流,如果对前5中Android设备分辨率进行适配就能让app在90%的安卓设备上比较美观的兼容. 涉及重要概念及关系 1.硬件属性 ── 屏幕尺寸.屏幕分辨率.屏幕像素密度 [屏幕尺寸]:屏幕对角线长度.单位是英寸,1英寸=2.54厘

Android之屏幕适配

Android之屏幕适配 Android之屏幕适配 适配方式一图片适配 适配方式二dimensxml文件适配 适配方式三布局文件适配 适配方式四java代码适配 适配方式五权重适配 适配:即当前应用在相同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等),以下已华为G700.模拟器为例,计算其像素密度. 案例一: 手机型号:G700 手机分辨率:1280*720 (注:手机两个直角边上分别放置了1280及720个像素点) 手机尺寸大小:5

ios中object c纯代码开发屏幕适配处理方法

纯代码开发屏幕适配处理方法: 为适配iphone各个版本的机型,对ui布局中的坐标采用比例的方式进行初始化,在这里选定iphone6作为ui布局 1.首先在AppDelegate.h中定义两个属性: 1 #import <UIKit/UIKit.h> 2 3 @interface AppDelegate : UIResponder <UIApplicationDelegate> 4 5 @property (strong, nonatomic) UIWindow *window;

Android开发之Ruby实现Android自动化屏幕适配

背景:我相信对于Android开发者来说,屏幕适配一直是你心中的痛-,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本.下面来讲一下思路. 首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px,那么我们就需要用100/2 = 50dp得到我们的这个标准值,以此类推,将app中所有需要适配的尺寸

android - 多屏幕适配相关

1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).android把屏幕分为以下4种:small,normal,large,extra large.怎么判断? 屏幕密度(Screen Density) - 一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点).相比起medium.high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少.android把屏幕密度分为4种:low,mediu

Android下屏幕适配&lt;二&gt;

Android下屏幕适配: 适配:即当前应用在不同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等),以下已华为G700.模拟器为例,计算其像素密度. 案例一: 手机型号:G700 手机分辨率:1280*720 (注:手机两个直角边上分别放置了1280及720个像素点) 手机尺寸大小:5英寸(手机对角线长度) 假设a,b分别为两个直角边,c为斜边,由勾股定理可得出计算方式:sqrt(a*a+b*b)/c 计算结果:sqrt(1280*12