1. 程式人生 > >Android java.lang.UnsupportedOperationException以及佈局異常處理

Android java.lang.UnsupportedOperationException以及佈局異常處理

           專案中出現 java.lang.UnsupportedOperationException然後報出佈局檔案異常,即android.view.InflateException: Binary XML file line #168: Error inflating class,然後仔細去檢視我們的佈局檔案,一切正常,但還是InflateException

           其實UnsupportedOperationException

這個異常然後導致InflateException原因是多方面。UnsupportedOperationException這是不支援操作的異常。

           我羅列一下大致幾種情況:

          1.Android 4.x及一下的裝置使用5.0以後MD設計引入的colorPrimary等屬性造成的異常

          2.有些給予Android原生系統再次開發的系統、Rom不支援Start、End,簡單更改為Left、Right,比如Layout_alignParentStart、layout_alignParentEnd,在一些廠商特別定製的系統是不相容的,所以我們要去使用相容的屬性

          3.專案沒有clean乾淨,導致build目錄存在老檔案,然後導致失敗

           其實上面這幾種都是比較好解決的,只要我們使用相容的屬性,基本不會有什麼問題。我來講另一種我們很難注意到的一種情況,然後會導致這種異常的報錯。

         

         一眼明瞭,轉換尺寸異常,然後就導致不支援操作,從而丟擲InflateException

。這是我們很難發現的一個小細節。因為我們在做螢幕適配的時候,我們會適配不同的螢幕解析度。我們會建立很多valuexx-xx資料夾,然後我們定義不同解析度的尺寸大小。但是前提我們應該要知道,當其中一個解析度適配不到我們定義的valuexx-xx資料夾的時候,系統預設會去載入一個存在的value資料夾下的dimens.xml。

          比如適配1920×1080,需要在res資料夾下建立value-1920×1080,然後定義一個dimens.xml檔案,定義在這個解析度下的所有尺寸。然後我們在其中一個佈局檔案引用此尺寸,比如@dimens/x20dp,執行裝置就會自動適配到value-1920×1080。當我們用了640×480的裝置,執行然後載入此佈局就肯定會丟擲異常,因為我們木有適配這個螢幕大小。

          所以,最通用的方法,我們也需要在res/value/dimens.xml下默定義一套預設的尺寸,記住,名字千萬要保持一致。這也是螢幕適配的原理。好了,言歸正傳,如果你發現了這個異常,有dimension:type=0x1的時候,你就要去檢查你的dimens.xml檔案下和你適配螢幕的資料夾,定義的尺寸有沒有保持一致。

         檔案和檔名,定義的名字保持一致。