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

Setting语言与输入法列表客制化相关推荐

  1. 教程:客制化您的输入法

    Tytoriol: Sulma skåld kastem denn Input Methodhet Ricardo & Sejvas Designworks Aktieselskåb #Tek ...

  2. Magento教程 7:客制化网站

    帮助你的Magento更上一层楼! 架站完成后,我们将分享一些Magento好用的功能.扩充套件.小技巧以及常见的问题. 开启多语言介面 在Magento中,你可以轻松的进行语言切换,只要使用Mage ...

  3. Android项目客制化

    关键编译目录 Makefile build/core/Makefile build/core/main.mk build/core/config.mk build/core/envsetup.mk b ...

  4. SystemUi状态栏客制化功能和常见问题分析

    一.多图标成点 当系统图标区域或者通知图标区域图标过多,而区域不够时,就会将多余的图标隐藏,并显示一个点,如下图所示. 介绍此功能之前先看一下图标的初始化过程,从中可以看到有个config_statu ...

  5. MTK客制化修改8.1系统

    客制化修改 基于6580平台的修改: 1 修改开机动画: 首先添加开机动画包加入以下路径  alps\device\mediateksample\tb8321p2_bsp\device.mk  然后在 ...

  6. camera_click,camera_focus无法客制化研究——添加copy脚本客制化(四)

    研究透了客制化时加PRODUCT_COPY_FILES为啥make会报错,停止编译,因为4.2是可以客制化增加任意copy编译的 在客户目录下增加vendor\artifacts\out\target ...

  7. 由I9100字体客制化apk架构说起

    众所周知,I9100可以在设置--显示设置--字体风格里面改变系统字体. android的系统字体位置在system/fonts文件夹下.而I9100无需root权限.只需安装字体apk包就可以实现更 ...

  8. 客制化NVRAM的以太网地址

    在使用SN Write写Ethernet MAC过程中出现了以下的错误: ERROR!! Ethernet Mac:MetaResult = SPMETA_DLL::META_LID_INVALID. ...

  9. 客制化键盘键位修改_干电池 支持5设备无线连接 - 高斯ALT71机械键盘拆解评测...

    近一段时间,本人就感觉小型紧凑机械键盘键盘很火,这点我很意外,一直以来都是87键和104键的天下,怎么突然就很火热呢?我真的是LOW.小型紧凑型机械键盘种类很多,有60.61.64.66.67.68. ...

  10. 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐

    机械键盘就只能玩游戏吗?当然不是,其实机械键盘出现还远远早于薄膜键盘,早期类似IBM.AST.HP.康柏一类的品牌机都是标配机械键盘的.早期的机械键盘确实有点笨重,尤其是白轴的机械键盘,让你毕生难忘. ...

最新文章

  1. Activity启动模式详解
  2. Android开发之模板模式初探
  3. python unix时间戳转换成时间_关于python:将unix时间戳字符串转换为可读日期
  4. 大数运算(6)——大数阶乘(求位数)
  5. Miniprofiler在普通net项目中的使用
  6. 学习分布式不得不会的BASE理论
  7. SpringBoot Redis分布式锁
  8. c++基础学习(08)--(继承、重载、多态、虚函数)
  9. python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】...
  10. 【Flink】Flink key 应该分配到哪个 KeyGroup 以及 KeyGroup 分配在哪个subtask
  11. web前端开发技术现状与发展_Web前端开发的未来,将会有哪些发展方向?
  12. 2018级C语言大作业 - 坦克动荡
  13. 轮播图的3个常见bug,即处理bug思路及其解决办法
  14. 如何安装mysql 8.0.12_基于Windows安装MySQL 8.0.12图文教程
  15. MongoDB学习(黑马教程)-5-数据库MongoDB的验证
  16. 微信授权+JS-SDK
  17. 掌握到胃-奈氏图与伯德图的绘制
  18. VSCode python extension loading 终极解决方案
  19. Defending Against Model Stealing Attacks with Adaptive Misinformation
  20. 毕业季的你准备好面试了吗?(下)

热门文章

  1. android远程主机强迫关闭了一个现有的连接,远程主机强迫关闭了一个现有的连接解决方法...
  2. 基于python语言设计的词云定制器
  3. 51nod3155 跳房子
  4. AidLearning0.87F3安装Python3.8
  5. 迅雷离线下载节点分布
  6. 简单粗暴讲述自动化仓储系统
  7. ThreadPoolExecutor中的submit()方法详细讲解
  8. 因果推断笔记—— 相关理论:Rubin Potential、Pearl、倾向性得分、与机器学习异同(二)
  9. SOF-SLAM:一种面向动态环境的语义视觉SLAM(2019,JCR Q1, 4.076)
  10. IOS UI学习 UI 十个小控件 初度学习