自定义View--IllegalArgumentException: negative width
如何在布局中查看错误
使用自定义View的属性时,可能会发现Layout布局没有报错,但是自定义的控件无法正常显示,运行也会报错,这时候可以查看布局中的报错提示:
报错提示
java.lang.IllegalArgumentException: negative width
at java.awt.BasicStroke.<init>(BasicStroke.java:194)
at java.awt.BasicStroke.<init>(BasicStroke.java:249)
at android.graphics.Paint_Delegate.getJavaStroke(Paint_Delegate.java:241)
at com.android.layoutlib.bridge.impl.GcSnapshot.createCustomGraphics(GcSnapshot.java:791)
at com.android.layoutlib.bridge.impl.GcSnapshot.drawInLayer(GcSnapshot.java:615)
at com.android.layoutlib.bridge.impl.GcSnapshot.draw(GcSnapshot.java:585)
at android.graphics.BaseCanvas_Delegate.draw(BaseCanvas_Delegate.java:556)
at android.graphics.BaseCanvas_Delegate.nDrawArc(BaseCanvas_Delegate.java:267)
at android.graphics.BaseCanvas.nDrawArc(BaseCanvas.java:-1)
at android.graphics.BaseCanvas.drawArc(BaseCanvas.java:93)
at android.graphics.Canvas.drawArc(Canvas.java:1422)
at android.graphics.BaseCanvas.drawArc(BaseCanvas.java:100)
at android.graphics.Canvas.drawArc(Canvas.java:1393)
at com.example.xcroundprogressbardemo.AnswerChartView.drawCircle(AnswerChartView.java:129)
at com.example.xcroundprogressbardemo.AnswerChartView.onDraw_Original(AnswerChartView.java:110)
at com.example.xcroundprogressbardemo.AnswerChartView.onDraw(AnswerChartView.java:-1)
解决方案
因为自定义View中引用了自定义属性,因此需要在根布局添加相应的命名空间,如果命名空间引入错误,属性引用不报红,但界面依旧报错,下图为正确的命名空间
xmlns:app="http://schemas.android.com/apk/res-auto"