天天看點

android.view.inflateexception binary xml file line 異常的解決方法

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

android.view.inflateexception binary xml file line 異常的解決方法

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:

android.view.inflateexception binary xml file line 異常的解決方法

繼承view的類的自定義view:

android.view.inflateexception binary xml file line 異常的解決方法

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

android.view.inflateexception binary xml file line 異常的解決方法

總之抛出這種異常的原因有可能是必須實作的構造器沒有實作:

須實作三個構造函數

    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);

繼續閱讀