Ich wollte ein numerisches Tastenfeld, das eine Schaltfläche "Go" oder "Done" hatte, schloss und führte eine Berechnungsklasse. Dank einem Tipp von Commonware, wo ich anfangen soll, habe ich das wunderbar am Emulator gemacht. Dann kam ich dazu, es auf meinen HTC-Wunsch zu testen und es funktioniert überhaupt nicht. Ich bin mir sicher, dass es wegen HTC Sinn sein muss, es ist ein eigenes Ime, aber es muss sicherlich eine Möglichkeit geben, dies auf HTC-Handys funktionieren zu lassen? Hat noch jemand es geschafft, dieses Problem zu umgehen?Android: Softkeyboard-Steuerelement auf HTC Wunsch
Antwort
Ich kann replizieren, was ich denke, dass Sie auf dem HTC Incredible sehen.
Nicht alle Softkeyboards unterstützen die IME-Aktionstaste. Einige, wie die Graffiti-Soft-Tastatur, können überhaupt keine Tasten haben, geschweige denn eine IME-Aktionstaste. Selbst die Compatibility Definition Document sagt nichts über das Erfordernis einer solchen Aktionstaste für die mit einem Gerät gelieferten Tastaturen aus.
Daher sollten Sie sich nicht auf die IME-Aktionsschaltfläche verlassen. Wenn es vorhanden ist, können Benutzer es verwenden. Jedoch haben Sie immer andere Mittel, um Ihr Ziel zu erreichen.
Ich habe festgestellt, ob die DONE/GO/RETURN-Taste mit einem onEditorActionListener gedrückt wurde, aber nach IME-Optionen und KeyEvents für HTC-Tastaturen und Tastaturen, die IME-Optionen akzeptieren.
(Dieser Code funktioniert für HTC Incredible Tastaturen sowie jede Tastatur, die IME Optionen hat) durch Modifizieren Asha-Lösung
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;
}
}
});
Ich befürchte, dass mit diesem Code der ** // Do some here ** Teil zweimal ausgeführt wird. Könntest du das überprüfen? – Konsumierer
Danke Asha .... arbeitete für mich – hemu
für mich wird es ERROR/AndroidRuntime (26336): FATALE AUSNAHME: Haupt java.lang.NullPointerException ------ auf Zeichenfolge "if (actionId == ..." – djdance
Ich wurde mit einem EditText mit input = "number" und das Problem gelöst:
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;
}
}
};
Der Fokus wurde entfernt, um den Nummernblock nicht mehr anzuzeigen. Das Imm wurde benötigt, weil eine weiche Tastatur auch nach dem Löschen des Fokus immer noch vorhanden war.
Also sagst du, mein bester Ansatz ist, meine eigene Tastatur zu erstellen, nicht ein IME, sondern eine Ansicht? Ich hatte einen Rechenknopf an einem Punkt, aber es wurde von der Tastatur abgedeckt. Es ist ärgerlich, wenn die Aktionstaste auf der HTC-Tastatur grün wird, wenn GO eingestellt wird, was großartig ist, so dass es so viel versteht, dass es nur 0 in der Actionid zurückgibt. Ich fange an zu denken, dass ich selbst ein kleines Keyboard erstellen sollte, aber ich versuchte es zu vermeiden. Ist das der beste Ansatz? Gibt es Dokumentation zu Android-Best Practices, die wirklich lesbar sind? –
Oh ich habe mich übrigens übrigens angemeldet. Ich wünschte, ich könnte es mir leisten, einen Ihrer Kurse in London zu besuchen, wäre sehr nützlich. Leider versuche ich Java und Android gleichzeitig durch Versuch und Irrtum zu lernen –
@Dream Architect: "Also aree Sie mein bester Ansatz sagen, ist meine eigene Tastatur zu erstellen, nicht ein IME, sondern eine Ansicht?" - Für eine normale Anwendung würden Sie einfach die Aktionsknöpfe als Teil der Aktivität haben. Für einen Taschenrechner werden Sie sowieso andere "Schlüssel" benötigen (+, -, *, /, usw.), und Sie benötigen wahrscheinlich Ihr eigenes Tastenfeld. In diesem Fall würde ich die Zahlentasten in dieses Tastenfeld stecken, so wie ein normaler Taschenrechner sie hat. – CommonsWare