android 语音和输入法按钮切换,android 切换系统语言,输入法也随之切换

为什么有时候切换系统语言,输入法也随之切换

在系统有谷歌拼音输入法(Pinying输入法)和android 键盘输入法(Latin 输入法)的时候,此时系统的输入法不是第三方输入法。

在这时候去切换系统语言:

当切换到中文时,不管之前是否是Pinyin输入法(或是Pinyin输入法都没有被勾选),现在都会自动切换到谷歌中文输入法

当切换到英文时,不管之前是否是Latin输入法(或是Latin 输入法都没有被勾选),现在都会自动切换到android 键盘输入法

原因:

在系统完成语言之后,

首先IME services会通过buildInputMethodListLocked() 把没有勾选的系统输入法都勾选了,

然后IME services(InputMethodManagerServices.Java)会收到ACTION_LOCALE_CHANGED的广播,

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() 方法--->最后调用到resetDefaultImeLocked(),

在resetDefaultImeLocked(),会现判断是否是SYSTEM IME,最后通过setSelectedInputMethodAndSubtypeLocked ()设置当前系统的输入法。

即完成了输入法随语言切换而改变

说明:如果当前输入法是第三方的,则上述语言切换之后,输入法不会随之改变。因为在resetDefaultImeLocked()中有关是否是系统输入法的判断,直接阻断了。

在resetDefaultImeLocked方法的最开始它为做一个判断:

if (mCurMethodId != null && !InputMethodUtils.isSystemIme(mMethodMap.get(mCurMethodId))) {

return;

}

这是一个android 原始设计。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android输入法切换引导功能通常指的是在用户首次安装并启用输入法应用时,系统会自动弹出一个输入法切换引导界面,提示用户如何在输入时切换不同的输入法。 具体实现方法可以参考以下步骤: 1. 在输入法应用的 AndroidManifest.xml 文件中,添加以下代码: ``` <activity android:name=".InputMethodSettingsActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.SHOW_INPUT_METHOD_PICKER" /> </intent-filter> </activity> ``` 2. 创建一个名为 InputMethodSettingsActivity 的 Activity,并在其中实现输入法切换引导功能的逻辑。 3. 在 Activity 的 onCreate 方法中,获取系统输入法管理器 InputMethodManager,并调用其 showInputMethodPicker 方法,显示输入法选择界面。 ``` InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showInputMethodPicker(); ``` 4. 在 Activity 的 onResume 方法中,判断当前是否为首次启动输入法应用,如果是,则调用 showInputMethodPicker 方法显示输入法选择界面。同时,将一个标志位设置为已启动过,以便下次进入应用时不再弹出引导界面。 ``` private boolean mIsFirstLaunch = true; @Override protected void onResume() { super.onResume(); if (mIsFirstLaunch) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showInputMethodPicker(); mIsFirstLaunch = false; } } ``` 通过以上步骤,就可以实现 Android 输入法切换引导功能了。需要注意的是,在实现过程中,还需要处理用户选择输入法后的回调逻辑,并在应用中提供方便用户切换输入法的方式,以提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值