由于搞设备的时候,有个需求就是设置多语言键盘,因为当时设备出厂的时候就是只有一个英语语言,当时是想着底层帮我这边搞好,殊不知底层这边没有办法弄,后面自己是通过反射机制来写入; 添加以后,键盘就可以通过长按空格来切换语言了
//添加系统语言
List<String> list = new ArrayList<>();
list.add("en") //英语
list.add("de") //德语
... 以此类推 可以参考LangKey? 的值来,然后再调用
getAddLocale(list)? //就可以了
public static void getAddLocale(List list) {
List listLocale =new ArrayList<>();
? ? for (int i =0; i < list.size(); i++) {
Locale locale =getLocale(list.get(i));
? ? ? ? if (locale!=null){
listLocale.add(locale);
? ? ? ? }
}
Locale[] localesList = listLocale.toArray(new Locale[listLocale.size() ]);
? ? LocaleList ll =new LocaleList(localesList);
? ? try {
Class localPicker = Class.forName("com.android.internal.app.LocalePicker");
? ? ? ? Method updateLocale = localPicker.getDeclaredMethod("updateLocales",
? ? ? ? ? ? ? ? LocaleList.class);
? ? ? ? updateLocale.invoke(null, ll);
? ? }catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException
| IllegalAccessException e) {
e.printStackTrace();
? ? }
}
//获取 Locale 对象
private static LocalegetLocale(String lankey) {
if (LangKey.ZH_CN.equals(lankey)) {
return Locale.CHINA;
? ? }else if (LangKey.EN_US.equals(lankey)) {
return Locale.ENGLISH;
? ? }else if (LangKey.JA_JP.equals(lankey)) {
return Locale.JAPAN;
? ? }else if (LangKey.KO_KR.equals(lankey)) {
return Locale.KOREA;
? ? }else if (LangKey.DE_DE.equals(lankey)){
return? Locale.GERMAN;
? ? }else if (LangKey.LO_LA.equals(lankey)) {
return new Locale("lo", "la");
? ? }else if (LangKey.KM_KH.equals(lankey)) {
return new Locale("km", "kh");
? ? }else if (LangKey.TL_PH.equals(lankey)) {
return new Locale("tl", "ph");
? ? }else if (LangKey.MY_MM.equals(lankey)) {
return new Locale("my", "mm");
? ? }else if (LangKey.RU_RU.equals(lankey)) {
return new Locale("ru", "ru");
? ? }else if (LangKey.CS_CZ.equals(lankey)) {
return new Locale("cs", "cz");
? ? }else if (LangKey.PL_PL.equals(lankey)) {
return new Locale("pl", "pl");
? ? }else if (LangKey.FR_FR.equals(lankey)){
return new Locale("fr", "fr");
? ? }else if (LangKey.NL_NL.equals(lankey)){
return new Locale("nl", "nl");
? ? }else if (LangKey.PT_PT.equals(lankey)){
return new Locale("pt", "pt");
? ? }else if (LangKey.ES_ES.equals(lankey)){
return new Locale("es", "es");
? ? }else if (LangKey.IT_IT.equals(lankey)){
return new Locale("it", "it");
? ? }else if (LangKey.GR_GR.equals(lankey)){
//特殊处理由于语言配置是配置gr,但系统前缀是el
? ? ? ? return new Locale("el", "gr");
? ? }else if (LangKey.RO_RO.equals(lankey)){
return new Locale("ro", "ro");
? ? }else if (LangKey.FI_FI.equals(lankey)){
return new Locale("fi", "fi");
? ? }else if (LangKey.NO_NO.equals(lankey)){
return new Locale("no", "no");
? ? }else if (LangKey.SE_SE.equals(lankey)){
//特殊处理由于语言配置是配置se,但系统前缀是sv
? ? ? ? return new Locale("sv", "se");
? ? }else if (LangKey.DK_DK.equals(lankey)){
//特殊处理由于语言配置是配置dk,但系统前缀是da
? ? ? ? return new Locale("da", "dk");
? ? }else if (LangKey.CZ_CZ.equals(lankey)){
//特殊处理由于语言配置是配置cz,但系统前缀是cs
? ? ? ? return new Locale("cs", "cz");
? ? }else if (LangKey.EE_EE.equals(lankey)){
//特殊处理由于语言配置是配置ee,但系统前缀是et
? ? ? ? return new Locale("et", "ee");
? ? }else if (LangKey.SK_SK.equals(lankey)){
return new Locale("sk", "sk");
? ? }else if (LangKey.UK_UK.equals(lankey)){
return new Locale("uk", "ua");
? ? }else if (LangKey.AR_AR.equals(lankey)){
return new Locale("ar", "ae");
? ? }else if (LangKey.LT_LT.equals(lankey)){
return new Locale("lt", "lt");
? ? }else if (LangKey.IR_IR.equals(lankey)){
return new Locale("ir", "ir");
? ? }else if (LangKey.KZ_KZ.equals(lankey)){
//特殊处理由于语言配置是配置se,但系统前缀是sv
? ? ? ? return new Locale("kz", "kz");
? ? }else {
return null;
? ? }
}
public static class LangKey {
//---------------语言名字key---------------
? ? //中文简体
? ? public static final StringZH_CN ="zh";
? ? //英语
? ? public static final StringEN_US ="en";
? ? //日语
? ? public static final StringJA_JP ="ja";
? ? //韩语
? ? public static final StringKO_KR ="ko";
? ? //柬埔寨语
? ? public static final StringKM_KH ="km";
? ? //泰国
? ? public static final StringTH_TH ="th";
? ? //法语
? ? public static final StringFR_FR ="fr";
? ? //越南语
? ? public static final StringVI_VN ="vi";
? ? //菲律宾语
? ? public static final StringTL_PH ="tl";
? ? //马来西亚语
? ? public static final StringMS_MY ="ms";
? ? //缅甸语
? ? public static final StringMY_MM ="my";
? ? //捷克语
? ? public static final StringCS_CZ ="cs";
? ? //印度尼西亚语
? ? public static final StringIN_ID ="in";
? ? //老挝语
? ? public static final StringLO_LA ="lo";
? ? //俄语
? ? public static final StringRU_RU ="ru";
? ? //印度
? ? public static final StringHI_IN ="hi";
? ? //波兰语
? ? public static final StringPL_PL ="pl";
? ? //德语
? ? public static final StringDE_DE ="de";
? ? //荷兰语
? ? public static final StringNL_NL ="nl";
? ? //葡萄牙
? ? public static final StringPT_PT ="pt";
? ? //葡萄牙
? ? public static final StringES_ES ="es";
? ? //意大利
? ? public static final StringIT_IT ="it";
? ? //希腊
? ? public static final StringGR_GR ="gr";
? ? //罗马尼亚语
? ? public static final StringRO_RO ="ro";
? ? //芬兰语
? ? public static final StringFI_FI ="fi";
? ? //挪威语
? ? public static final StringNO_NO ="no";
? ? //瑞典语
? ? public static final StringSE_SE ="se";
? ? //丹麦语
? ? public static final StringDK_DK ="dk";
? ? //捷克语
? ? public static final StringCZ_CZ ="cz";
? ? //爱沙尼亚语
? ? public static final StringEE_EE ="ee";
? ? //斯洛伐克语
? ? public static final StringSK_SK ="sk";
? ? //乌克兰语
? ? public static final StringUK_UK ="uk";
? ? //阿拉伯语
? ? public static final StringAR_AR ="ar";
? ? //立陶宛语
? ? public static final StringLT_LT ="lt";
? ? //波斯语
? ? public static final StringIR_IR ="ir";
? ? //哈萨克语
? ? public static final StringKZ_KZ ="kz";
}