Nine-patch
NinePatchDrawable圖形是可展開的位元影像圖片,Android系統會根據View對象中的內容來自動的調整背景圖片。使用NinePatch圖片的一個例子就是標準Android按鈕的背景圖片---按鈕必鬚根據字串的長度來展開背景圖片。NinePathc圖形繪製的是一個標準的PNG圖片,它包含了一個像素寬的邊框。圖片檔案的副檔名必須是.9.png,並且要儲存到工程的res/drawable/目錄中。
邊框被用於定義圖片的展開和靜態地區。通過在邊框的左邊和上邊(其他邊框的像素應該完成透明或是白色的)繪製一個或多個1像素寬的黑線來指定一個可展開的地區。可有多個可展開的地區,但它們的相對尺寸都相同,最大的地區始終要保持最大的地區。
還可以通過繪製右邊線和底邊線來定義一個圖片的可選繪製地區(有效填充線)。如果一個View對象設定NinePatch圖片作為它的背景,並且給該View對象指定了文本,那麼它就會自我展開,以便所有的文本都能夠被填充在由右邊線和底邊線(如果包括的話)所設計的內部地區,如果不包括填充線,Android系統會使用左邊線和上邊線來定義該繪製地區。
要澄清不同邊線間的差異,為了展開圖片,左邊線和上邊線定義的圖片的像素被允許複製。底邊線和右邊線定義了圖片內相對地區,View對象的內容被允許放到這個地區內。
是用於定義按鈕的一個NinePatch圖片檔案:
這個NinePatch圖片用左邊線和上邊線定義了一個可展開的地區,用右邊線和底邊線定義了一個可繪圖的地區。為了展開圖片,在上面的那個圖片中,灰色的點劃線定指定了圖片將要被重複的地區。在下面的那個圖片中,粉色的矩形指明了View的內容被允許放置的地區。如果該地區不同完全填充View對象的內容,那麼該圖片就會被展開,直到內容被完全填充。
Draw 9-patch工具,使用WYSIWYG圖形編輯器,提供非常方便的建立NinePatch圖片的方法。如果定義的可展開地區在繪製構件的過程中存在像素複製的風險,它甚至會產生一個警告。
樣本XML
該布局XML示範了如何把一個NinePatch圖片添加到一對按鈕中(NinePatch圖片被儲存在res/drawable/my_button_background.9.png中):
<Buttonid="@+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"/>
<Buttonid="@+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"/>
要注意的是,寬度和高度屬性都被設定成了”wrap_content”,以便按鈕能夠根據文本尺寸來調整大小。
以下是使用上面顯示的圖片和XML定義所展現的兩個按鈕。注意,按鈕的寬度和高度是如何根據文本的尺寸來展開背景圖片的。