Android java.lang.UnsupportedOperationException以及佈局異常處理
專案中出現 java.lang.UnsupportedOperationException然後報出佈局檔案異常,即android.view.InflateException: Binary XML file line #168: Error inflating class,然後仔細去檢視我們的佈局檔案,一切正常,但還是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
比如適配1920×1080,需要在res資料夾下建立value-1920×1080,然後定義一個dimens.xml檔案,定義在這個解析度下的所有尺寸。然後我們在其中一個佈局檔案引用此尺寸,比如@dimens/x20dp,執行裝置就會自動適配到value-1920×1080。當我們用了640×480的裝置,執行然後載入此佈局就肯定會丟擲異常,因為我們木有適配這個螢幕大小。
所以,最通用的方法,我們也需要在res/value/dimens.xml下默定義一套預設的尺寸,記住,名字千萬要保持一致。這也是螢幕適配的原理。好了,言歸正傳,如果你發現了這個異常,有dimension:type=0x1的時候,你就要去檢查你的dimens.xml檔案下和你適配螢幕的資料夾,定義的尺寸有沒有保持一致。
檔案和檔名,定義的名字保持一致。