安卓權威編程指南-筆記(第21章 XML drawable)

來源:互聯網
上載者:User

標籤:ble   引用   指定   不同的   tor   介面   用法   strong   放大   

在Andorid的世界裡,凡事要在螢幕上繪製的東西都可以叫drawable,比如抽象圖形,Drawable的子類,位元影像圖形等,我們之前用來封裝圖片的BitmapDrawable就是一種drawable。

本章我們還會看到更多的drawable:state list drawable、shape drawable和layer list drawable。

這三個drawable都定義在XML檔案中,可以歸為一類,統稱為XML drawable。

 

 

shape drawable

使用ShapeDrawable,可以把按鈕編程圓形,XML drawable和螢幕像素密度無關,所以無需考慮建立特定像素密度目錄,直接把它放入預設的drawable檔案夾就可以了。

在res/drawable目錄下建立一個圓形drawable。名為button_beat_box_normal.xml的檔案,代碼如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android"       android:shape="oval">    <solid        android:color="@color/drak_blue"/>    </shape>

該XML檔案定義了一個背景色為深藍色的圓形。 也可以使用shape drawable 定製其他圖形。

 最後修改styles中的按鈕背景即可。

 

state list drawable

根據按鈕的狀態,state list drawable可以切換指向不同的drawable,它會根據按鈕的狀態改變使用的 drawable. 

建立一個state list drawable

 

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/button_beat_box_pressed"          android:state_pressed="true"/>    <item android:drawable="@drawable/button_beat_box_normal"/></selector>

 

當按鈕按下時用button_beat_box_pressed作為背景。沒有按下時用button_beat_box_normal作背景。

除了按下狀態,state list drawable還支援禁用,聚焦,以及啟用等狀態。

 

layer list drawable

layer list drawable能讓兩個XML drawable合二為一,藉助這個工具可以為按下狀態的按鈕添加一個深色的圓環。

 1 <?xml version="1.0" encoding="utf-8"?> 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 3     <item> 4         <shape xmlns:android="http://schemas.android.com/apk/res/android" 5                android:shape="oval"> 6  7             <solid 8                 android:color="@color/red"/> 9         </shape>10     </item>11 12     <item>13         <shape14             android:shape="oval">15             <stroke16                 android:width="4dp"17                 android:color="@color/drak_red"/>18         </shape>19     </item>20 21 </layer-list>

 

為什麼要用XML drawable

XML Reader用起來方便靈活,不僅用法多樣,還易於更新維護,搭配使用shape drawable和 layer list drawable可以做出複雜的背景圖,連影像編輯器都省了,更改BeatBox應用的配色更是簡單,直接修改XML drawable中的顏色就行了。

XML Reader獨立於螢幕像素密度,它們直接定義在drawable目錄中,不需要加螢幕密度資源修飾符,如果是普通映像,就需要準備多個版本,以適配不同螢幕像素密度的裝置,而XML drawable只要定義一次,就能在任何裝置的螢幕上表現出色。

 

使用9-patch映像

9-patch映像可以解決映像展開問題,9-patch映像是一種特別處理過的檔案,讓Android知道映像的哪些部分可以展開,哪些不可以。只要處理得當,就能確保背景圖的邊角與原始映像保持一致。為什麼要叫作9-patch呢?9-patch映像分成3×3的網格,即由9部分或9 patch組成的網格。網格角落部分不會被縮放,邊緣部分的4個patch只按一個維度縮放,而中間部分則按兩個維度縮放,:

9-patch映像和普通PNG映像十分相似,只有兩處不同:9-patch影像檔名以.9.png結尾,映像邊緣具有1像素寬度的邊框。這個邊框用以指定9-patch映像的中間位置。邊框像素繪製為黑線,以表明中間位置,邊緣部分則用透明色表示。

 

 使用 Mipmap 映像

資源修飾符和drawable用起來都很方便。應用要用到映像,就針對不同的裝置尺寸準備不同尺寸的圖片,再分別放入drawable-mdpi和drawable-hdpi這樣的檔案夾。然後,按名字引用它們。剩下的就交給Android了,它會根據當前裝置的螢幕密度調用相應的圖片。

有個問題不得不提。發布到Google市集的APK檔案包含了項目drawable目錄裡的所有圖片,哪怕是從來不會用到的圖片。這是個負擔。

有人想到針對裝置定製APK,比如mdpi APK一個,hdpi APK一個,等等。但問題解決得不夠徹底。假如想保留各個螢幕像素密度的啟動表徵圖呢?

Android啟動器是個常駐主畫面的應用(詳見第22章)。按下裝置的主畫面鍵,會回到啟動器應用介面。有些新版啟動器會顯示大尺寸應用表徵圖。想讓大表徵圖清晰好看,啟動器就需要使用更高解析度的表徵圖。對於hdpi裝置,要顯示大表徵圖,啟動器就會使用xhdpi表徵圖。找不到的話,就只能使用低解析度的表徵圖。可想而知,放大展開後的表徵圖肯定很糟。Android的終極解決之道是使用mipmap目錄。

APK分包時,mipmap資源會全部包含在APK檔案中。要一勞永逸,推薦的做法就是,把應用程式啟動器表徵圖放在mipmap目錄中,其他圖片都放在drawable目錄中。

 

安卓權威編程指南-筆記(第21章 XML drawable)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.