1. 程式人生 > >[Android bug] shape="line" GLES20Canvas NPE

[Android bug] shape="line" GLES20Canvas NPE

在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>標籤也不行,這裡記錄一下!