2016-03-28 28 views
1

Ich entwickle eine Anwendung, in der ich dem Benutzer erlauben soll, die auf der Standardtastatur angezeigten Eingabetasten auf Anfrage oder standardmäßig zu ändern, beispielsweise kann ich den Benutzer zu Beginn auffordern Wählen Sie die Standardsprache und danach, wann immer die Standardtastatur verwendet wird, zeigt die App immer die Tasten der Tastatur die ausgewählte Sprache,Tastatureingabe Programmatisch ändern

Ich weiß, dass dies möglich ist, weil in Standard-Tastatur-App, wenn mehrere Eingabemethoden ausgewählt sind , dann langes Drücken der Leertaste erlaubt es, die Eingabemethoden zur Laufzeit zu ändern, wenn dies möglich ist, dann ist auch meine Anforderung möglich ...

Ich möchte nicht auf defau hinweisen lt Tastatur wie folgt:

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

Ich möchte nicht das Gebietsschema ändern und neu zu starten meine Tätigkeit die ganze Zeit wie:

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

Ich möchte nur die Tastatureingabe in meiner gewünschten Sprache zeigen.

Antwort

-4

Nach einigen Recherchen hier tun und dort die Antwort gefunden, vor allem müssen Sie eine benutzerdefinierte Tastatur-Ansicht erstellen, die keyboardView erstreckt und darin statischen Variablen Schlüsselwert erstellen wie

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

danach in Ihrem IME Klasse, in der Sie den inputMethodService implementiert haben, erstellen Sie die Tastaturen in der override-Funktion onInitializeInterface. wie

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

danach diese letzten statischen Schlüssel in der OnKey Überbrückungsfunktion als Schalt Fällen und in den Fällen fügen Sie die Tastaturen entsprechend:

setKeyboard(mEngQwertyKeyboard); 
+1

für verschiedene Sprachen erforderlich, um verschiedene xml des Tastaturlayouts zu erstellen? –

+0

Nur System-Apps können benutzerdefinierte Tastatur einstellen. –

+0

nach givinig Erlaubnis von Schreibschutzeinstellungen, wurde die Anwendung abgestürzt. Es besagt, dass die Systemberechtigung nur von System-Apps erteilt wird. –

2

Sie Tastatur nur ohne Benachrichtigung des Benutzers ändern kann und nur wenn Ihre App aus Sicherheitsgründen als System-App ausgeführt wird.

Sie müssen erste Android-Erlaubnis geben, in der App AndroidManifest.xml

"android.permission.WRITE_SECURE_SETTINGS" 

Dann müssen Sie ID der Tastatur bestimmen.

-> id Um zu wissen, müssen Sie Menü Tastatur Standard beibehalten, von der Einstellung manuell irgendwo diesen Druck setzen,

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

Sobald Sie id drucken und Sie kennen Ihre Tastatur-ID Sie wie pro unten tun können (ich habe meine Standard-Tastatur auf Japanisch geändert)

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

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

Genießen Sie !!

+0

nach Erteilung der schreibgeschützten Einstellungen wurde die Anwendung abgestürzt. Es besagt, dass die Systemberechtigung nur von System-Apps erteilt wird. –

+0

Nur System-Apps können benutzerdefinierte Tastatur festlegen. –