开发过程中有时需要导入第三方的输入法,比较多的是注音输入法(台湾)。
这里以某注音输入法为例:
1,预装输入法的apk(略)
2,将输入法预设为中文繁体的默认输入法
3,切换语言时,输入法会随着语言变化(切到繁体使用注音输入法)
以Android 8.0为例:
预设注音输入法为默认输入法:
frameworks\base\core\res\res\values\config.xml
(overlay机制下在overlay\frameworks\base\core\res\res\values\config.xml)
修改config.xml中的字段config_enabled_input_methods和config_default_input_method。
config_enabled_input_methods为输入法数组,每个参数用:隔开。
config_default_input_method为默认输入法。
不同国家和地区的使用不同values来区分。
<string name="config_enabled_input_methods">com.android.inputmethod.pinyin/.PinyinIME:
com.android.inputmethod.latin/.LatinIME:tw.zhuyin/.zhuyinIME</string>
<string name="config_default_input_method">tw.zhuyin/.zhuyinIME</string>
另外,需要在DatabaseHelper中配置预设值:
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java的loadSecureSettings方法中
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS,
com.android.internal.R.string.config_enabled_input_methods);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
com.android.internal.R.string.config_default_input_method);
这样默认烧机出来,输入法就会随着默认语言的改变而变化。
切换语言的时候输入法跟随:[此方法不是最终方法,请谨慎导入]
frameworks\base\core\java\com\android\internal\inputmethod\InputMethodUtils.java
其中InputMethodListBuilder中的fillImes方法中修改:
public InputMethodListBuilder fillImes(final ArrayList<InputMethodInfo> imis,
final Context context, final boolean checkDefaultAttribute,
@Nullable final Locale locale, final boolean checkCountry,
final String requiredSubtypeMode) {
for (int i = 0; i < imis.size(); ++i) {
final InputMethodInfo imi = imis.get(i);
if(locale.getCountry().equals("TW")
&&imi.getId().equals("tw.zhuyin/.zhuyinIME")){
mInputMethodSet.clear();
mInputMethodSet.add(imi);
}else{
if (isSystemImeThatHasSubtypeOf(imi, context,
checkDefaultAttribute, locale,checkCountry,
requiredSubtypeMode)) {
mInputMethodSet.add(imi);
}
}
}
return this;
}
此对策是因为未找到设置国家或地区与对应输入法默认对应关系的地方,如果有朋友知道在更合理的地方修改,望告知,不甚感激。
相关代码:
InputMethodManagerService.java
InputMethodUtils.java
config.xml
DatabaseHelper.java
参考博客:https://blog.csdn.net/nei504293736/article/details/51599733
https://blog.csdn.net/wlwl0071986/article/details/47680807