Sto progettando una tastiera personalizzata per la lingua Amharic in Android, ma quanto segue è applicabile a molte altre lingue diverse dall'inglese.Uscita di un carattere per due tasti nella tastiera Android
Due o più combinazioni di tasti si traducono in un carattere. Quindi, se l'utente digita 'S', la tastiera emetterà 'ሰ' ... e se la seguono con la lettera 'A', la 'ሰ' viene sostituita con 'ሳ'.
Sono riuscito a ottenere una soluzione, come di seguito, lavorando osservando il carattere prima del cursore e controllandolo contro una mappa. Tuttavia, mi chiedevo se fosse possibile una soluzione più semplice e pulita.
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);
}
Siamo spiacenti, è offline per qualche tempo. Come posso assegnarti una taglia piena di 50 punti? –
Immagino che tu non possa, ma va bene. :) –