Ich entwerfe eine benutzerdefinierte Tastatur für Amharisch Sprache in Android, aber das Folgende ist auf viele andere nicht-Englisch Sprachen anwendbar.Ausgabe eines Zeichens pro zwei Tasten in Android-Tastatur
Zwei oder mehrere Tastenkombinationen werden in ein Zeichen übersetzt. Wenn der Benutzer also 'S' eintippt, gibt die Tastatur 'ሰ' aus ... und wenn sie dem Buchstaben 'A' folgen, wird 'ሰ' durch 'ሳ' ersetzt.
Es gelang mir, eine Lösung zu finden, wie unten, indem ich das Zeichen vor dem Cursor betrachtete und es mit einer Map abtastete. Ich habe mich jedoch gefragt, ob es eine einfachere und sauberere Lösung gibt.
public void onKey(int primaryCode, int[] keyCodes) {
InputConnection ic = getCurrentInputConnection();
HashMap<String, Integer> en_to_am = new HashMap<String, Integer>();
CharSequence pChar = ic.getTextBeforeCursor(1, 0);
int outKey = 0;
//build a hashmap of 'existing character' + 'new key code' = 'output key code'
en_to_am.put("83", 4656);
en_to_am.put("ሰ65", 4659);
try {
//see if config exists in hashmap for 'existing character' + 'new key code'
if (en_to_am.get(pChar.toString() + primaryCode) != null) {
outKey = en_to_am.get(pChar.toString() + primaryCode);
ic.deleteSurroundingText(1, 0);
} else {
//else just translate latin to amharic (ASCII 83 = ሰ)
if (en_to_am.get("" + primaryCode) != null) {
outKey = en_to_am.get("" + primaryCode);
} else {
//if no translation exists, just output the latin code
outKey = primaryCode;
}
}
} catch (Exception e) {
outKey = primaryCode;
}
char code = (char) outKey;
ic.commitText(String.valueOf(code), 1);
}
Entschuldigung war für einige Zeit offline. Wie vergebe ich dir eine volle Prämie von 50 Punkten? –
Ich denke, du kannst nicht, aber es ist in Ordnung. :) –