Setting语言与输入法列表客制化
2016-06-27 17:26
281 查看
Setting语言与输入法列表客制化
Setting的语言字串来自ICU资源,其语言名称显示也有2种形式。一种仅仅是把语言名称显示出来如中文;还有一种是语言名称后带有国家备注,如中文(繁体)、中文(简体)。当Projectconfig.mk中有至少2个相同的语言代码打开时,如en_CA,en_US,zh_CN,zh_TW,这时语言列表中就会有English(Canada)、English(united States)、中文(繁体)、中文(简体);如果仅仅打开en_US和zh_CN,就会显示English、中文。
Setting中显示语言名称的地方主要有3处,如果需要克制化,可按照如下方法:
(1) 设置》语言和输入法》语言
5.7tp-7.png (91.72 KB, 下载次数: 0 )
下载附件 保存到相册
2016-5-7 10:11 上传
在文件packages\apps\Settings\res\values\arrays.xml定制要显示的语言、国家代码以及修改后
的名称,如中文定制如下,
<string-array translatable="false" name="special_locale_codes">
<item>zh_CN</item>
<item>zh_TW</item>
</string-array>
<string-array translatable="false" name="special_locale_names">
<item>中文 (简体)</item>
<item>中文 (繁體)</item>
</string-array>
如果要定制其他语言可以在上面添加即可。
主要函数是在LocalePicker.JAVA(frameworks\base\core\java\com\android\internal\app)
public static ArrayAdapter<LocaleInfo> constructAdapter(Context context,final int layoutId, final int
fieldId)
(2) 设置》语言和输入法.
5.7tp-8.png (92.92 KB, 下载次数: 0 )
下载附件 保存到相册
2016-5-7 10:11 上传
这部分没有定制,直接获取ICU字串资源,代码如下
InputMethodAndLanguageSettings.java
alps\packages\apps\Settings\src\com\android\settings\inputmethod
public void onResume() {
if (hasOnlyOneLanguageInstance(language,
Resources.getSystem().getAssets().getLocales())) {
localeString = conf.locale.getDisplayLanguage(conf.locale);
} else {
// localeString = conf.locale.getDisplayName(conf.locale);
localeString= getDisplayName(conf.locale);//自己封装函数
}
……
如果要定制话,可以自己封装函数如下.
private static String getDisplayName(Locale l) {
final String[] specialLocaleCodes =
resources.getStringArray(R.array.special_locale_codes);
final String[]
specialLocaleNames=resources.getStringArray(R.array.special_locale_names);
String code = l.toString();
for (int i = 0; i < specialLocaleCodes.length; i++) {
if (specialLocaleCodes.equals(code)) {
return specialLocaleNames;
}
}
return l.getDisplayName(l);
}
(3) 设置》语言和输入法》anroid键盘设置》输入语言
5.7tp-9.png (89.85 KB, 下载次数: 0 )
下载附件 保存到相册
2016-5-7 10:11 上传
这一块和(2)一样也是直接从底层获取,如果要定制,可以修改如下部分
InputMethodSubtype.java
alps\frameworks\base\core\java\android\view\inputmethod
public CharSequence getDisplayName(
Context context, String packageName, ApplicationInfo appInfo) {
final Locale locale = constructLocaleFromString(mSubtypeLocale);
//final String localeStr = locale != null ? locale.getDisplayName() :
mSubtypeLocale;
final String localeStr = locale != null ? getDisplayName(locale) :
mSubtypeLocale;
……
自己封装函数如下.
private static String getDisplayName(Locale l) {
final String[] specialLocaleCodes =
resources.getStringArray(R.array.special_locale_codes);
final String[]
specialLocaleNames=resources.getStringArray(R.array.special_locale_names);
String code = l.toString();
for (int i = 0; i < specialLocaleCodes.length; i++) {
if (specialLocaleCodes.equals(code)) {
return specialLocaleNames;
}
}
return l.getDisplayName();
}
对于KK版本输入法语言列表中一些字串是在String.xml中定义的,如下为英语的字串
packages\inputmethods\LatinIME\java\res\values
<string name="subtype_en_GB">English (UK)</string>
<string name="subtype_en_US">English (US)</string>
<string name="subtype_es_US">Spanish (US)</string
相关文章推荐
- 你应该学习哪种编程语言?
- [转]我们需要一种其他人能使用的编程语言
- QQ输入法自动删除其它输入法的解决方法
- Access中字段上自动打开的输入法的解决方法
- C#中Winfrom默认输入法的设置方法
- C#语言主要特性总结
- C语言中static的作用及C语言中使用静态函数有何好处
- PHP检测用户语言的方法
- JavaScipt基本教程之JavaScript语言的基础
- 火狐textarea输入法的bug的触发及解决
- 各种语言、服务器301跳转代码全集
- 查看Java所支持的语言及相应的版本信息
- 使用php判断浏览器的类型和语言的函数代码
- php实现获取及设置用户访问页面语言类
- GO语言类型转换和类型断言实例分析
- C#设置输入法实例分析
- Android的文本和输入之创建输入法教程
- Android输入法弹出时覆盖输入框问题的解决方法
- Android中系统默认输入法设置的方法(输入法的显示和隐藏)