以编程方式更改键盘输入语言

我正在开发一个应用程序,我需要允许用户根据请求或默认情况下更改默认键盘中显示的输入键,例如,我可能会提示用户在开头选择默认语言,之后,无论何时使用默认键盘,应用程序始终会显示所选语言的键盘键,

我知道这是可能的,因为在默认键盘应用程序中,当选择多个输入方法时,长按空格键允许在运行时更改输入方法,如果可能的话,那么我的要求也是可能的……

我不想提示默认键盘,如下所示:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); imeManager.showInputMethodPicker(); 

我不想改变语言环境并一直重启我的活动,如:

 Resources res = getBaseContext().getResources(); // Change locale settings in the app. DisplayMetrics dm = res.getDisplayMetrics(); android.content.res.Configuration conf = res.getConfiguration(); conf.locale = new Locale("ru".toLowerCase()); res.updateConfiguration(conf, dm); Log.i("inside onStart","after ever"); setContentView(R.layout.activity_main); 

我只想用我想要的语言显示键盘输入。

只有在出于安全原因您的应用程序作为系统应用程序运行时,您才可以在没有用户通知的情况下更改键盘

您需要先在应用的AndroidManifest.xml中授予Android权限

 "android.permission.WRITE_SECURE_SETTINGS" 

然后,您需要确定键盘的ID。

– >要知道id,你需要手动保持键盘默认设置菜单,然后把这个打印放在某个地方,

 System.out.println(Settings.Secure.getString(getContentResolver(),Settings.Secure.DEFAULT_INPUT_METHOD)); 

一旦你打印id并且你知道你的键盘ID,你可以按照下面的说法(我已经将我的默认键盘更改为日语)

 InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); //imeManager.showInputMethodPicker(); //This is to see available keyboards. imeManager.setInputMethod(null,"jp.co.omronsoft.openwnn/.OpenWnnJAJP"); 

请享用 !!

在做了一些研究之后找到了答案,首先你必须创建一个自定义键盘View,它扩展了keyboardView并在其中创建静态键值变量,如

 static final int KEYCODE_LANGUAGE_SWITCH_ENG = -102; static final int KEYCODE_LANGUAGE_SWITCH_URDU = -103; 

之后,在已实现inputMethodService的IME类中,在onInitializeInterface覆盖函数内创建键盘。 喜欢

 mSymbolsKeyboard = new Keyboard(this, R.xml.qwerty2); mEngQwertyKeyboard = new Keyboard(this, R.xml.eng_qwerty); 

在此之后,在onKey覆盖函数中添加这些最终静态键作为切换案例,并在相应的情况下设置键盘:

 setKeyboard(mEngQwertyKeyboard);