解决Error inflating class android.widget.DatePicker问题
解决Error inflating class android.widget.DatePicker问题
解决Error inflating class android.widget.DatePicker问题
编者:李国帅
时间:2020.7.17
背景:
DatePicker用于展示一个日期选择控件。
这篇小文章讲述遇到此问题,以及解决的过程。
时间选择是常见的功能,以前写了一个时间选择对话框,如下:
最近在我调用以前写的时间选择器的时候,出现了错误,直接闪退。
android.view.InflateException: Binary XML file line #63: Binary XML file line #63: Error inflating class android.widget.DatePicker
过程:
本来用的好好的,怎么会出问题呢?
看看了调用的地方,没发现什么问题,如果不引用
搜索了下,有人说是和构造函数有关,需要定义另外两个构造函数,于是在对话框加入
结果发现加入入没啥用。
public DatePickerPopWindow(Context context) {public DatePickerPopWindow(Context context, AttributeSet attrs) {public DatePickerPopWindow(Context context, AttributeSet attrs, int defStyle) {
那么DatePicker能不能放在布局中呢?
也有人说,DatePicker和android sdk或是编译工具有关,但发现也有不少人是使用这种用法的,也没见有什么问题。
解决:
最后还是老老实实自力更生,是不是调用的方法不对。
对DatePicker一个个属性进行测试,发现原来最后一句android:theme="@style/Theme.Picker"引起的问题。
@style/Theme.Picker到底做了什么引起程序这么大的愤怒?
原来是DatePicker的Theme搞错了,应该是
分析为什么出错
间接方法容易挖坑
也够折腾的,这个问题之所以不容易找,还是因为问题被隐藏起来了。问题被潜意识的假设隐藏,认为android:theme="@style/Theme.Picker"这个语句是没有问题。
如果一开始就直接使用基本属性
也是因为拷贝粘贴的错。
可能更容易找问题,也更不容易出错。因为Widget.EditText更明显不应该用在DatePicker上面。
但是有时候还必须使用间接的方式,比如使用 ... android:textColor="#0c0c0c" android:textSize="@dimen/sp_12" android:theme="@android:style/Theme" /> 和使用 android:theme="@style/Theme.Picker" 是有区别的,第一种使用方法 android:textColor="#0c0c0c" android:textSize="@dimen/sp_13" 不能改变日期选择器的字体颜色大小。需要手动设置日历字体大小。 后一种方法中 是