第三方输入法导入

开发过程中有时需要导入第三方的输入法,比较多的是注音输入法(台湾)。
这里以某注音输入法为例:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值