Cambiar el idioma de entrada del teclado mediante progtwigción

Estoy desarrollando una aplicación en la que necesito permitir al usuario cambiar las teclas de entrada que se muestran en el teclado predeterminado, previa solicitud o de forma predeterminada, por ejemplo, puedo solicitar al usuario que al principio seleccione el idioma predeterminado y luego de eso, siempre que se utiliza el teclado predeterminado, la aplicación siempre muestra las teclas del teclado del idioma seleccionado,

Sé que esto es posible, porque en la aplicación de teclado predeterminada, cuando se seleccionan múltiples métodos de entrada, presionar la barra espaciadora permite cambiar los métodos de entrada en tiempo de ejecución, si esto es posible, entonces mi requisito también es posible …

No quiero pedir un teclado predeterminado como el siguiente:

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

No quiero cambiar la configuración regional y reiniciar mi actividad todo el tiempo como:

 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); 

Solo quiero mostrar la entrada del teclado en mi idioma deseado.

Puede cambiar el teclado solo sin notificación del usuario y solo si su aplicación se está ejecutando como una aplicación del sistema por razones de seguridad.

Primero debe otorgar permiso a Android en AndroidManifest.xml de su aplicación

 "android.permission.WRITE_SECURE_SETTINGS" 

Luego debes determinar la id de tu teclado.

-> Para conocer la identificación, debes mantener el valor predeterminado de tu teclado para no configurar el menú manualmente y luego colocar esta impresión en algún lugar,

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

Una vez que imprima el ID y conozca su ID del teclado, puede hacer lo siguiente (he cambiado mi teclado predeterminado al japonés)

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

¡Disfruta!

Después de hacer algunas investigaciones aquí y allí encontré la respuesta, primero que nada tienes que crear una vista de teclado personalizada que extienda keyboardView y en ella cree una variable de valor de clave estática como

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

después de eso en su clase IME donde ha implementado el inputMethodService, cree los teclados dentro de la función de anulación onInitializeInterface. me gusta

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

después de esto, agregue estas claves estáticas finales en la función de anulación onKey como casos de cambio, y en los casos configure los teclados en consecuencia:

 setKeyboard(mEngQwertyKeyboard);