自定义Drawable引发Inflation Exception问题排查求助
问题原因分析
1. 缺少XML布局适配的构造函数
当你在XML布局中引用自定义TextDrawable时,Android的LayoutInflater会尝试调用带Context和AttributeSet参数的构造函数来实例化Drawable,但你的TextDrawable只实现了无参构造函数,系统找不到匹配的构造方法,直接触发实例化失败,进而导致包含该Drawable的GridLayout无法完成inflation,抛出Error inflating class android.widget.GridLayout异常。
2. 构造函数中错误使用Application Context获取资源
在TextDrawable的无参构造里,直接通过Application.Context获取颜色和字体资源,这种方式在Drawable被inflation加载时可能出现上下文不匹配的问题——Drawable应该关联到当前View所在的Activity/View Context,而非全局Application Context,后者无法正确适配当前布局的主题配置,可能引发资源加载异常。
3. Draw方法中文字绘制坐标错误
canvas.DrawText("CABBAGE", 0, 0, this.TextPaint)将文字的baseline设置在Canvas的(0,0)位置,这会导致文字完全被绘制到Canvas可视区域之外(因为文字的baseline以下还有部分内容,而y=0是顶部边界),虽然这不会直接引发inflation崩溃,但会导致Drawable显示异常,后续如果涉及测量逻辑也可能触发其他问题。
内容的提问来源于stack exchange,提问作者Nathan Sokalski
相关产品推荐
相关产品推荐

