欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

解决Error inflating class android.widget.DatePicker问题

程序员文章站 2022-03-28 17:53:31
解决Error inflating class android.widget.DatePicker问题编者:李国帅qq:9611153 微信lgs9611153时间:2020.7.17背景:DatePicker用于展示一个日期选择控件。这篇小文章讲述遇到此问题,以及解决的过程。时间选择是常见的功能,以前写了一个时间选择对话框,如下:最近在我调用以前写的时间选择器的时候,出现了错误,直接闪退。android.view.InflateException: Bi.....

解决Error inflating class android.widget.DatePicker问题

编者:李国帅

qq:9611153 微信lgs9611153

时间:2020.7.17

背景:

DatePicker用于展示一个日期选择控件。

 

这篇小文章讲述遇到此问题,以及解决的过程。

 

时间选择是常见的功能,以前写了一个时间选择对话框,如下:

解决Error inflating class android.widget.DatePicker问题

最近在我调用以前写的时间选择器的时候,出现了错误,直接闪退。

android.view.InflateException: Binary XML file line #63: Binary XML file line #63: Error inflating class android.widget.DatePicker

 

过程:

本来用的好好的,怎么会出问题呢?

看看了调用的地方,没发现什么问题,如果不引用<DatePicker>控件,对话框没有问题。

 

搜索了下,有人说是和构造函数有关,需要定义另外两个构造函数,于是在对话框加入

结果发现加入入没啥用。

public DatePickerPopWindow(Context context) {

public DatePickerPopWindow(Context context, AttributeSet attrs) {

public DatePickerPopWindow(Context context, AttributeSet attrs, int defStyle) {

那么DatePicker能不能放在布局中呢?

也有人说,DatePicker和android sdk或是编译工具有关,但发现也有不少人是使用这种用法的,也没见有什么问题。

 

解决:

最后还是老老实实自力更生,是不是调用的方法不对。

解决Error inflating class android.widget.DatePicker问题

对DatePicker一个个属性进行测试,发现原来最后一句android:theme="@style/Theme.Picker"引起的问题。

@style/Theme.Picker到底做了什么引起程序这么大的愤怒?

解决Error inflating class android.widget.DatePicker问题

原来是DatePicker的Theme搞错了,应该是

解决Error inflating class android.widget.DatePicker问题

 

分析为什么出错

间接方法容易挖坑

也够折腾的,这个问题之所以不容易找,还是因为问题被隐藏起来了。问题被潜意识的假设隐藏,认为android:theme="@style/Theme.Picker"这个语句是没有问题。

如果一开始就直接使用基本属性

      解决Error inflating class android.widget.DatePicker问题                      <!--style="@android:style/Widget.EditText" 仅仅是加了一个横线,并不改变日期选择器的样式-->也是因为拷贝粘贴的错。

 

可能更容易找问题,也更不容易出错。因为Widget.EditText更明显不应该用在DatePicker上面。

 

<View android:theme<View style=不同

 

但是有时候还必须使用间接的方式,比如使用

<DatePicker

...

            android:textColor="#0c0c0c"

            android:textSize="@dimen/sp_12"

            android:theme="@android:style/Theme" />

和使用

         android:theme="@style/Theme.Picker"   

<style name="Theme.Picker" parent="@android:style/Theme">
        <item name="android:textSize">@dimen/dp_12</item>
        <item name="android:textColor">#0c0c0c</item>
</style>

是有区别的,第一种使用方法

          android:textColor="#0c0c0c"

          android:textSize="@dimen/sp_13"

不能改变日期选择器的字体颜色大小。需要手动设置日历字体大小。

 

后一种方法中

        <item name="android:textSize">@dimen/dp_12</item>

        <item name="android:textColor">#0c0c0c</item>

是 <style name="Theme.Picker" parent="@android:style/Theme">的属性,而不是DatePicker的属性。

这一点<View android:theme和    <View style="@style/line_0_7" />有所不同。直接使用style相当于把一些属性包含进去。

解决Error inflating class android.widget.DatePicker问题

 

 

本文地址:https://blog.csdn.net/lgs790709/article/details/107402768

相关标签: android