Android集成Hijri日历报错:MissingResourceException资源缺失
解决MaterialHijriCalendarView加载时的MissingResourceException问题
这问题本质是Ummalqura日历库缺少法语(fr_FR)的本地化资源包导致的。当你的设备或应用系统语言设为法语时,库会自动尝试加载对应区域的格式化资源(比如月份名称、星期文本),但该库默认只支持阿拉伯语和英语的本地化,找不到UmmalquraFormatData_fr_FR资源就抛出了MissingResourceException,进而引发布局加载失败的InflateException。
下面给你几个可行的解决方案:
方案1:强制日历库使用支持的语言
这是最快捷的解决办法,让日历组件用库已支持的语言(阿拉伯语或英语),有两种实现方式:
方式A:全局设置应用区域
在你的Application类或者目标Activity的onCreate方法中,把默认区域改成库支持的语言,比如阿拉伯语:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置默认区域为阿拉伯语 Locale supportedLocale = new Locale("ar"); Locale.setDefault(supportedLocale); Configuration config = getResources().getConfiguration(); config.setLocale(supportedLocale); getResources().updateConfiguration(config, getResources().getDisplayMetrics()); setContentView(R.layout.your_target_layout); }
方式B:单独为日历组件指定区域
如果不想全局修改应用语言,可以只给日历组件单独设置区域:
MaterialHijriCalendarView calendarView = findViewById(R.id.your_calendar_view_id); // 用阿拉伯语区域初始化希吉拉日历 UmmalquraCalendar hijriCalendar = new UmmalquraCalendar(new Locale("ar")); calendarView.setCalendar(hijriCalendar);
方案2:自定义法语本地化资源(适合必须支持法语的场景)
如果你需要法语支持,可以自己补全缺失的本地化资源:
- 在项目里创建包路径
com.github.msarhan.ummalqura.calendar.text - 创建
UmmalquraFormatData_fr_FR类,继承UmmalquraFormatData,实现对应的本地化方法,比如返回法语的月份、星期名称:
package com.github.msarhan.ummalqura.calendar.text; public class UmmalquraFormatData_fr_FR extends UmmalquraFormatData { @Override public String[] getMonthsNames() { return new String[]{"Muharram", "Safar", "Rabi' al-awwal", ...}; // 替换为法语翻译的完整月份名 } @Override public String[] getShortMonthsNames() { return new String[]{"Muh.", "Saf.", ...}; // 法语短月份名 } // 按需重写星期名称等其他方法 }
方案3:升级库到最新版本
检查你当前使用的Ummalqura日历库版本,看看最新版是否已经补充了法语的本地化资源。如果是旧版本,尝试升级到最新版,说不定官方已经修复了这个问题。
内容的提问来源于stack exchange,提问作者Ad el
相关产品推荐
相关产品推荐

