涉及到如下文件:
frameworks/base/core/java/com/android/internal/app/LocalePickerWithRegion.java
packages/apps/Settings/src/com/android/settings/localepicker/LocaleListEditor.java
libcore\ojluni\src\main\java\java\util\Locale.java
\packages\apps\Settings\src\com\android\settings\localepicker\LocaleDragAndDropAdapter.java
\frameworks\base\core\java\com\android\internal\app\LocaleStore.java
\frameworks\base\core\java\com\android\internal\app\LocalePicker.java
\packages\apps\Settings\src\com\android\settings\localepicker\LocaleListEditor.java
\frameworks\base\core\res\res\values\locale_config.xml
N0 语言列表分析文档:
MTK 有一篇《Android N Language》的文档,这里因为一些原因不能上传。
1、修改 \packages\apps\Settings\res\values\arrays.xml
<!-- START. Add more languages to Language preferences. By ShawnXiaFei, 20170509. -->
<string-array name="preset_language_tags">
<item>"hi-IN"</item> <!-- Hindi (India) -->
<item>"gu-IN"</item> <!-- Gujarati (India) -->
<item>"bn-IN"</item> <!-- Bengali (India) -->
<item>"pa-IN"</item> <!-- Punjabi (Gurmukhi,India) -->
<item>"ur-IN"</item> <!-- Urdu (India) -->
<item>"ar-YE"</item> <!-- Arabic (Yemen) -->
<item>"ta-IN"</item> <!-- Tamil (India) -->
<item>"te-IN"</item> <!-- Telugu (India) -->
<item>"kn-IN"</item> <!-- Kannada (India) -->
<item>"ml-IN"</item> <!-- Malayalam (India) -->
<item>"ne-IN"</item> <!-- Nepali (India) -->
<item>"af-NA"</item> <!-- Afrikaans (Namibia) -->
<item>"fo-DK"</item> <!-- Faroese (Denmark) -->
<item>"fa-AF"</item> <!-- Persian (Afghanistan) -->
<item>"fil-PH"</item> <!-- Filipino (Philippines) -->
<item>"si-LK"</item> <!-- Sinhala (Sri Lanka) -->
</string-array>
<!-- END. Add more languages to Language preferences. By ShawnXiaFei, 20170509. -->
2、修改 \packages\apps\Settings\src\com\android\settings\Settings.java
public class Settings extends SettingsActivity {
/// START. Add more languages to Language preferences. By ShawnXiaFei, 20170508.
@Override
protected void onCreate(Bundle savedState) {
/// must call super.
super.onCreate(savedState);
/// check first start.
SharedPreferences sp = getPreferences(MODE_PRIVATE);
boolean isFirstStart = sp.getBoolean("isSettingsFirstStart", true);
android.util.Log.e("Shawn", "onCreate, isFirstStart = "+isFirstStart);
if(isFirstStart){
sp.edit().putBoolean("isSettingsFirstStart", false).apply();
presetLanguage(getResources().getStringArray(R.array.preset_language_tags););
}
}
/// preset language list.
private void presetLanguage(String[] languageTags){
// do not need to preset.
if (null == languageTags || 0 == languageTags.length) {
return;
}
// alreday exist in list.
LocaleList localeList = LocalePicker.getLocales();
List<Locale> newList = new ArrayList<>();
for(int i = 0 ; i < localeList.size() ; i++){
Locale locale = localeList.get(i);
String tag = locale.toLanguageTag();
if(!newList.contains(locale)){
newList.add(locale);
}
else{
android.util.Log.e("Shawn", "old exist, tag = "+tag);
}
}
// new list.
for(String tag : languageTags){
Locale locale = Locale.forLanguageTag(tag);
if(!newList.contains(locale)){
newList.add(locale);
}
else{
android.util.Log.e("Shawn", "new exist, tag = "+tag);
}
}
// reset to preference.
localeList = new LocaleList(newList.toArray(new Locale[0]));
LocalePicker.updateLocales(localeList);
}
/// END. Add more languages to Language preferences. By ShawnXiaFei, 20170508.
......
}