Android默认输入法

    工作时经常会接到修改默认输入法的需求,在网上也可以找到很多这方面的资料,但有很多是修改了没起作用的。有一部分是因为他们只是默认了输入法,而没有使可用输入法。要默认的输入法一定要在编译系统时预置进去,要修改的地方有两处:

frameworks\base\packages\SettingsProvider\res\values\defaults.xml

frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java

其实很多的Android默认值都是在defaults.xml中设置的,默认输入法在defaults的修改是增加

<string name="enabled_input_methods" translatable="false">"com.mls.numkeyboard/org.nyanya.android.traditionalt9.TraditionalT9:com.android.inputmethod.latin/.LatinIME"</string>
<string name="default_input_methods" translatable="false">"com.mls.numkeyboard/org.nyanya.android.traditionalt9.TraditionalT9"</string>
com.mls.numkeyboard是输入法的包名,org.nyanya.android.traditionalt9.TraditionalT9是输入法的service的name.

然后再在DatabaseHelper.java的loadSecureSettings(SQLiteDatabase db)方法的最后增加

loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_methods);
编译烧录系统修改默认输入法就完成了。默认输入法之后,切换系统语言后当前输入法可能也会切换为Android键盘。

如果想要当前输入法不随着系统语言的改变而改变,可以找到frameworks\base\services\core\java\com\android\server\InputMethodManagerService.java

在InputMethodManagerService中找到代码

// IMMS wants to receive Intent.ACTION_LOCALE_CHANGED in order to update the current IME
 // according to the new system locale.
        final IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_LOCALE_CHANGED);
        mContext.registerReceiver(
                new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        synchronized(mMethodMap) {
                         //   resetStateIfCurrentLocaleChangedLocked();把这行代码注释
                        }
                    }
                }, filter);
把resetStateIfCurrentLocaleChangedLocked();注释掉之后当前输入法就不会因为切换系统语言而改变了。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值