修改设置语言选项,删除 [Developer]Accented English或者增加其他自己喜欢的语种

来源:互联网 发布:pandomo磐多魔 知乎 编辑:程序博客网 时间:2024/05/29 15:55

经常会遇见下面的情况,表示很烦躁


语言选项里面多了第一个[Developer] Accented English 看到它就不爽,怎么删除呢?

在进入到系统设置-语言和输入法-语言,界面就会出现一列语言清单,有各种各样的语言,点击某一个语言后系统就会被设置成该语言环境。那么,这列语言的字符串资源是从哪里获取到的呢?现在结合自己的理解介绍如下:
首先,从Settings的xml目录下settings_headers.xml文件中可以知道“语言和输入法”的选项在InputMethodAndLanguageSettings.java类中,如图:![settings_headers.xml中的部分设置项][1]

然后从InputMethodAndLanguageSettings类中的onCreate()方法知道“语言和输入法”的设置布局文件为language_settings.xml文件下:![InputMethodAndLanguageSettings.java部分代码][2]
接着,我们再找到language_settings.xml布局文件:![language_settings布局文件部分代码][3]
可知,"语言"这一选项的代码实现是在LocalePicker.java下,接着再找到LocalePicker类:![LocalePicker类代码][4]
从代码可知,改类继承自framework层下的一个同名LocalePicker类,该类只是作为一个接口,具体实现是在com.android.internal.app.LocalePicker文件中,截取关键代码:

public static ArrayAdapter<LocaleInfo> constructAdapter(Context conte...

它里面可以找到

 else {                        String displayName;                        if (s.equals("zz_ZZ")) {                            displayName = " [Developer] Accented English";                        }  else {                            displayName = toTitleCase(l.getDisplayLanguage(l));                        }                        if (DEBUG) {                            Log.v(TAG, "adding "+displayName);                        }                       preprocess[finalSize++] = new LocaleInfo(displayName, l);                    }
以上的代码,显然是把
" [Developer] Accented English" 
赋值给了displayName,然后把它加入到数组preprocess[]里面去,可以获得所加的数组大小其实就是finalSize的值,然后有下面的代码:

        final LocaleInfo[] localeInfos = new LocaleInfo[finalSize -1];        for (int i = 0; i < finalSize -1; i++) {            localeInfos[i] = preprocess[i];Log.d("pishum","" + preprocess[i]);        }

把数组preprocess[]放到localeInfos[]数组里面去,由于我打了log,显示的我要去掉的Developer Accented English是在数组的最后一个元素位置,所以我上面的代码是我修改过的,只需要将preprocess[]数组除了最后一个元素全部赋值到数组localeInfos[]就可以了,那个Developer Accented English 的选项自然就会北删除掉

0 0
原创粉丝点击