在之前一篇博文中,谈到了设计Android应用时会遇到设备尺寸、分辨率及软件版本碎片化的问题,并介绍了通过制作多套资源(ldpi、mdpi、hdpi、xhdpi)和布局的办法来克服。今天我们来聊聊9-patch,它也是用来帮助我们解决此问题的。
我们先通过一张图来了解一下9-patch的作用。下图的那种气泡框在地图类应用中很常见,左图的气泡框里只有两个汉字,右图有八个汉字,这两个气泡框都有四个圆角,下边还有一个尖角,右边那个气泡框是由左边那个拉伸出来的。
9-patch其实是一种比较特殊的png格式的图片,通过在图片的上边和右边画一个像素宽的黑线来标示可拉伸区域(这条边线上的其他像素用白色或透明色)。如果还需要标示文字在图片中的显示区域,那么就在图片的左边和下边画一个像素的黑线。见下图。
一个9-patch可以指定多个可拉伸区域,将制作好的9-patch文件正确命名后放到特定的文件夹下就可以生效了。Android内部的绘制机制会按照9-patch图片中的标示根据不同情况进行合理地拉伸。
9-patch可以应用到很多地方,比如应用的背景,使用9-patch的话只要画一个像素即可,这样可以减小图片资源的大小。还有就是在做按钮或文本框时,如果需要根据屏幕的分辨率自动拉伸(如在800×480分辨率的手机上运行的应用,在854×480上可能就要对其中一些图片进行拉伸了),使用9-patch会非常的方便。甚至有些简单的图也可以做成9-patch文件,比如“+”。应用在设计的时候应尽量使用9-patch,不仅可以减少应用的大小,增强应用的适配能力,提高应用的性能,还能在一定程度上减少制图的工作量。