经常会遇见下面的情况,表示很烦躁
语言选项里面多了第一个[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 的选项自然就会北删除掉。