Desideravo un tastierino numerico con un pulsante go o done che chiudesse ed eseguisse una classe di calcolo. Grazie a un suggerimento del commonware su dove iniziare, ho funzionato magnificamente sull'emulatore. Poi sono venuto a caricarlo sul mio desiderio HTC per i test e non funziona affatto. Sono sicuro che deve essere a causa dell'intelligenza di HTC che ha il suo stile, ma ci deve essere sicuramente un modo per fare questo lavoro sui telefoni HTC? Qualcun altro è riuscito a risolvere questo problema?Android: softkeyboard control su HTC desire
risposta
Posso replicare quello che penso si stia vedendo su HTC Incredible.
Non tutte le tastiere software supporteranno il pulsante di azione IME. Alcuni, come la "tastiera" di Graffiti soft, potrebbero non avere pulsanti, per non parlare di un pulsante di azione IME. Anche lo Compatibility Definition Document non dice nulla sulla richiesta di un tale pulsante di azione per le tastiere fornite con un dispositivo.
Quindi, non si deve fare affidamento sul pulsante di azione IME. Se è lì, gli utenti possono usarlo. Tuttavia, hai sempre qualche altro mezzo per realizzare qualunque sia il tuo obiettivo.
Sto rilevando se il pulsante DONE/GO/RETURN è stato premuto utilizzando un OnEditorActionListener, ma controllando le opzioni IME e KeyEvents per coprire sia le tastiere HTC sia le tastiere che accettano le opzioni IME.
(Questo codice funziona per HTC tastiere Incredible nonché qualsiasi tastiera che dispone di opzioni IME)
EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){
public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){
if(actionId == EditorInfo.IME_ACTION_DONE
|| actionId == EditorInfo.IME_NULL
|| event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
//Do something in here
return true;
} else {
return false;
}
}
});
Temo, che con questo codice la parte ** // Fai qualcosa qui ** verrà eseguita due volte .. potresti controllare? – Konsumierer
Grazie Asha .... ha funzionato per me – hemu
per me ottiene ERROR/AndroidRuntime (26336): FATAL EXCEPTION: main java.lang.NullPointerException ------ on string "if (actionId == ..." – djdance
stavo usando un EditText con InputType = "numero" e risolto il problema modificando la soluzione di Asha:
private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){
public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){
if(actionId == EditorInfo.IME_ACTION_DONE
|| actionId == EditorInfo.IME_NULL
|| event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
tv.clearFocus();
//Stupid keyboard needs to be closed as well
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(tv.getWindowToken(), 0);
return true;
} else {
return false;
}
}
};
La messa a fuoco è stata rimossa per non mostrare più il tastierino numerico. L'imm è stato richiesto perché una tastiera morbida era ancora presente anche dopo aver eliminato la messa a fuoco.
quindi stai dicendo che il mio approccio migliore è creare la mia tastiera personale, non un IME ma una vista? Ho avuto un pulsante calcola in un punto, ma era coperto dalla tastiera. È fastidioso quando il tasto di azione sulla tastiera HTC diventa verde quando è impostato per digitare GO, il che è ottimo, quindi capisce che restituisce solo 0 nell'ID azione. Sto cominciando a pensare di creare una piccola tastiera io stesso è la strada da percorrere ma cercavo di evitarlo? È l'approccio migliore? Esiste qualche documentazione sulle best practice Android che sia leggibile acutamente? –
Oh, mi sono abbonato alla fine. Vorrei poter permettermi di frequentare uno dei tuoi corsi a Londra, sarebbe abbastanza utile. purtroppo sto cercando di imparare Java e Android allo stesso tempo per tentativi ed errori –
@Dream Architect: "quindi stai dicendo che il mio approccio migliore è creare la mia tastiera, non un IME ma una vista?" - per un'applicazione ordinaria, il pulsante di azione dovrebbe essere equivalente all'attività. Per una calcolatrice, avrai comunque bisogno di altri "tasti" (+, -, *, /, ecc.), E probabilmente avrai bisogno del tuo pannello dei pulsanti. In quel caso, inserirò i tasti numerici in quel pannello dei pulsanti, come se li avesse una normale calcolatrice. – CommonsWare