Android的多分辨率适配

屏幕尺寸、屏幕分辨率、屏幕密度

  • 屏幕尺寸:是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸为5英寸,5寸×2.54厘米/寸=12.7厘米。

  • 屏幕分辨率:屏幕分辨率就是手机屏幕的像素点数,指屏幕横竖各有多少个像素,一般描述成屏幕的“高×宽”。安卓手机屏幕常见的分辨率有 800×480、1280×720、1920×1080等,例如1280×720表示此屏幕在纵向有1280个像素,在横向有720个像素。

  • 屏幕密度:屏幕密度就是每英寸的像素点数(dpi),数值越高当然显示越细腻。对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚。手机可以有相同的分辨率,但屏幕尺寸可以不相同。

    屏幕密度计算示例:LG Nexus 5为4.95英寸、1920×1080的主屏,它的dpi为:sqrt(1920*1920+1080*1080)/4.95=445dpi


Android 常见分辨率

可通过查看最新的友盟指数获取。

2015年9月,占比5%以上的分辨率如下:

  • 720P:1280×720(标清,standard definition,SD)

  • 1080P:1920×1080(高清,high definition,HD)

  • WVGA:800×480

  • FWVGA:854×480

  • QHD:960×540


dip、dp、px、sp 介绍

  • px:pixel,像素,构成图像的最小单位。

  • dp、dip:Density Independent Pixels,密度无关像素,以160dpi为基准,1dip=1px。

  • sp:Scale-Independent Pixels,可以根据文字大小首选项进行放缩,主要用于字体显示。

    谷歌开发指导中推荐使用12sp以上的字体,否则用户将无法看清。另外,从小到大,推荐使用12sp、14sp、18sp、22sp作为字体首选大小。设置字体大小时不要使用奇数或小数,可能会造成精度丢失。

在layout文件中设置控件尺寸时应采用fill_parent、match_parent、wrap_content和dp。具体来说,设置view的属性android:layout_width和android:layout_height的值时,fill_parent、 match_parent、wrap_content和dp比px更好,文字大小应该使用sp来定义。

在程序的代码中不要出现具体的像素值,在dimens.xml中定义。为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。


mdpi、hdpi、xdpi、xxdpi

不同像素密度下,同一张图片的显示效果不同。为了更好的显示效果,我们需要给不同的像素密度配备不同的图片。

如何实现呢?开发工具会自动创建不同像素密度的drawable文件夹。

  • drawable-ldpi
  • drawable-mdpi
  • drawable-hdpi
  • drawable-xhdpi
  • drawable-xxhdpi

我们需要将不同的图片放到不同像素密度的文件夹中,程序运行时,系统会自动去寻找最适合的图片。

这些像素密度的修饰符mdpi、hdpi、xhdpi等还可以用来修饰values、layout等文件夹,与drawable的用法一样。

谷歌对不同的像素密度进行了分类,常见的有以下五种:

  • mdpi:120dpi~160dpi
  • hdpi:160dpi~240dpi
  • xhdpi:240dpi~320dpi
  • xxhdpi:320dpi~480dpi
  • xxxhdpi:480dpi~640dpi

安卓巴士中有如下的介绍:

在设计图标时,对于五种主流的像素密度应按照2:3:4:6:8的比例进行缩放。例如,一个启动图标的尺寸为48×48dp,这表示在mdpi上其世纪尺寸应为48×48px,在hdpi的屏幕上其世纪大小是mdpi的1.5倍(72×72px),在xdpi的屏幕上其实际大小是mdpi的2倍(96×96px),依次类推。

另外,虽然Andriod也支持低像素密度(ldpi)的屏幕,但无需为此费神,系统会自动将hdpi尺寸的图标缩小到1/2进行匹配。

AndroidManifest.xml 设置

  • android:anyDensity=”true”时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。

  • android:anyDensity=”false”时,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源。


layout 适配不同分辨率

将mdpi、hdpi、xdpi等应用到layout上,在res目录下创建不同的layout文件夹,比如layout-640x360、layout-800x480、layout-hdpi等,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。


9-patch图片

在android中,不仅可以使用.png、.jpg、.gif的普通图片作为图片资源,而且可以将扩展名为.9.png的9-patch图片作为图片资源。android的SDK目录tools下的draw9patch工具可以生成一个可以伸缩的标准png图像,该图像的扩展名为.9.png。 9-patch图片通常用作背景,与普通图片不同的是,使用9-patch图片作为屏幕或者按钮背景时,当屏幕尺寸或按钮大小改变时,图片可自动缩放,达到不失真效果。

9-patch PNG图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。


drawable、layout 适配横竖屏

  • drawable

    • drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源。

    • drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。

  • layout

    在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。


参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值