你是否曾经对res/drawable目录下的*.9.png文件感觉到迷惑呢?下面的内容说的就是这么一些事儿。
*.9.png对应着android中类NinePatchDrawable,它是一个Drawable对象。它是一张可伸展的bitmap图片。当*.9.png用于背景图片时,android会自动地根据其上的View的大小来调整*.9.png的大小。比如说,一个按钮的背景图片会随着按钮上的TextView的大小来调整背景的大小。
NinePatchDrawable是一张标准的PNG图片,图片上有一个1像素宽度的边框,它必须保存为*.9.png的文件格式,并存放在res/drawable目录下。
下面通过一张图来说明NinePatchDrawable中各边的边框的作用:
关于上图的说明:
左和上边框表示着图片伸展的方向和区域(如位于上方的图片的灰色虚线所示),而右和下边框表示图片上的View的放置区域(如位于下方的图片的粉红虚线框所示)。
下面来看一个实例,有两个Button,它们都有相同的背景图片my_button_background.9.png,但Button内的TextView的大小却不一样:<Button id="@+id/tiny" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerInParent="true" android:text="Tiny" android:textSize="8sp" android:background="@drawable/my_button_background"/> <Button id="@+id/big" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerInParent="true" android:text="Biiiiiiig text!" android:textSize="30sp" android:background="@drawable/my_button_background"/>两个Button的效果图:
Nine-patch图片的制作
可以使用sdk目录/tools/下的draw9patch工具来制作*.9.png图片。