有時候一個很簡單的xml布局檔案,運作卻抛出以下異常:

07-25 10:40:50.966: d/androidruntime(31570): shutting down vm
07-25 10:40:50.966: w/dalvikvm(31570): threadid=1: thread exiting with uncaught exception (group=0x42441700)
07-25 10:40:50.976: e/androidruntime(31570): fatal exception: main
07-25 10:40:50.976: e/androidruntime(31570): java.lang.runtimeexception: unable to start activity componentinfo{com.example.moveball/com.example.moveball.mainactivity}: android.view.inflateexception: binary xml file line #9: error inflating class com.example.moveball.drawview
07-25 10:40:50.976: e/androidruntime(31570): at android.app.activitythread.performlaunchactivity(activitythread.java:2308)
07-25 10:40:50.976: e/androidruntime(31570): at android.app.activitythread.handlelaunchactivity(activitythread.java:2362)
07-25 10:40:50.976: e/androidruntime(31570): at android.app.activitythread.access$700(activitythread.java:168)
07-25 10:40:50.976: e/androidruntime(31570): at android.app.activitythread$h.handlemessage(activitythread.java:1329)
出現這種異常,一般是與相應的xml的标簽和屬性的命名、定義有關。
有時候很小的錯誤就會産生這種問題,這種小錯誤一般很難檢查,是以在寫代碼的時候就要有所注意,免得之後檢查起來麻煩。
比如:控件edittext寫成了textview等小問題
又如:沒有找到資源檔案。
提示:可以參考我的另外一篇文章《android資源檔案夾及資源檔案的詳細介紹》
一般看看res/下面的資源檔案,比如全放在drawable-mdpi/目錄下,,将drawable-mdpi/下的資源檔案拷貝一份到drawable-ldpi/目錄下,還是報錯誤,再拷貝一份到drawable-hdpi/目錄下,問題解決。
要經常懷疑尋找的位置資源檔案不存在。
一般在res/下建一目錄drawable/,将drawable-mdpi/下所有的資源檔案都拷貝到drawable/下即可。
這些類似的等等資源檔案的錯誤需要注意。
總結一下xml檔案經常容易犯的低級錯誤:
1. 控件名稱不能寫錯
2.名稱的大小寫要區分,如edittext與edittext是完全不一樣的
3.标簽一定是成對出現的,尤其是嵌套布局
4.屬性前面一般要加android:
5.id比較特殊,應該是@+id ,其它的直接加@即可,如@string
6.drawable中引用的圖檔資源不存在或名稱大小寫有誤
此外,出現這種異常還可能與自定義的view類有關,需要增加一個帶屬性的構造函數
抛出異常時的main.xml與自定義view類相關代碼如下:
activity_main.xml:

繼承view的類的自定義view:

對于此異常,如下進行修改:添加view類的另一個構造方法即可解決問題!

總之抛出這種異常的原因有可能是必須實作的構造器沒有實作:
須實作三個構造函數
public galleryflow(context context) {
super(context);
}
public galleryflow(context context, attributeset attrs) {
super(context, attrs);
public galleryflow(context context, attributeset attrs, int defstyle) {
super(context, attrs, defstyle);