[Android bug] shape="line" GLES20Canvas NPE
阿新 • • 發佈:2018-12-17
在Android開發過程中發現一個bug,直接看程式碼:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <size android:width="0dp" android:height="@dimen/dimen_20"/> </shape>
定義一個這樣的shape作為LinearLayout的divider使用,在4.4以上的裝置上使用都沒有問題,但是一旦在4.4裝置上跑的時候就直接crash了,crash資訊如下:
java.lang.NullPointerException at android.view.GLES20Canvas.setupModifiers(GLES20Canvas.java:1439) at android.view.GLES20Canvas.drawLines(GLES20Canvas.java:1019) at android.view.GLES20Canvas.drawLine(GLES20Canvas.java:1009) at android.graphics.drawable.GradientDrawable.draw(GradientDrawable.java:538)
查閱相關資料,發現這是Android 4.4的一個bug,進行如下修改可解決:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <size android:width="0dp" android:height="@dimen/dimen_20"/> <stroke android:color="@android:color/transparent"/></shape>
是的,這裡一定要加上<stroke>標籤,加<solid>標籤也不行,這裡記錄一下!