You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android点击MaterialDateRangePicker出现布局加载异常及属性解析失败问题

问题:MaterialDateRangePicker点击时InflateException异常排查与解决

异常信息

android.view.InflateException: Binary XML file line #23 in com.dev:layout/mtrl_picker_dialog: Binary XML file line #17 in com.dev:layout/mtrl_picker_header_title_text: Error inflating class TextView
    Caused by: android.view.InflateException: Binary XML file line #17 in com.dev:layout/mtrl_picker_header_title_text: Error inflating class TextView
    Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f0400bd a=6}
        at android.content.res.TypedArray.getColorStateList(TypedArray.java:596)
        at android.widget.TextView.readTextAppearance(TextView.java:3961)
        at android.widget.TextView.<init>(TextView.java:1064)
        at android.widget.TextView.<init>(TextView.java:968)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
        at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1551)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1602)
        at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:242)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1061)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1233)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1119)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1231)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1119)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at com.google.android.material.datepicker.MaterialDatePicker.onCreateView(MaterialDatePicker.java:209)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
        at androidx.fragment.app.DialogFragment.performCreateView(DialogFragment.java:489)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

点击事件实现代码

MaterialDatePicker.Builder<Pair<Long, Long>> builder = MaterialDatePicker.Builder.dateRangePicker();

CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();
builder.setCalendarConstraints(constraintsBuilder.build());

MaterialDatePicker<?> picker = builder.build();

picker.show(getFragmentManager(), picker.toString());

当前已配置的主题样式

<item name="materialCalendarStyle">@style/Widget.MaterialComponents.MaterialCalendar</item>
<item name="materialCalendarFullscreenTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar.Fullscreen</item>
<item name="materialCalendarTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar</item>
<item name="colorSurface">#FFFFFF</item>

原因分析

  1. 主题继承不完整:AppTheme未正确继承Material Components的基础主题,仅添加Calendar相关属性无法覆盖所有依赖的样式属性,导致TextView加载文本样式时无法解析缺失的颜色状态列表属性。
  2. FragmentManager兼容性问题:使用getFragmentManager()而非Support版本的getSupportFragmentManager(),可能与MaterialDatePicker依赖的AndroidX Fragment存在兼容性冲突。
  3. 依赖版本不匹配:Material Components依赖版本与其他AndroidX依赖版本不一致,可能导致资源解析异常。

解决方法

  • 修正主题继承:确保AppTheme继承自Material Components的基础主题,示例如下:

    <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- 保留原有配置 -->
        <item name="materialCalendarStyle">@style/Widget.MaterialComponents.MaterialCalendar</item>
        <item name="materialCalendarFullscreenTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar.Fullscreen</item>
        <item name="materialCalendarTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar</item>
        <item name="colorSurface">#FFFFFF</item>
        <!-- 其他自定义主题属性 -->
    </style>
    

    根据需求选择对应主题,如需要ActionBar可使用Theme.MaterialComponents.DayNight.DarkActionBar。

  • 替换为Support FragmentManager:若Activity继承自AppCompatActivity,将getFragmentManager()替换为getSupportFragmentManager():

    picker.show(getSupportFragmentManager(), picker.toString());
    
  • 统一依赖版本:确保build.gradle中Material Components依赖使用稳定版,且与其他AndroidX依赖版本兼容,示例:

    implementation 'com.google.android.material:material:1.9.0'
    
  • 清理重建项目:执行Android Studio中的Clean Project和Rebuild Project操作,清除缓存资源,确保新配置生效。

内容的提问来源于stack exchange,提问作者kartheeki j

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:15:44