Zuverlässige Art zu wissen, wann die androide Softtastatur zurücktritt (Rückruf, der an jedem Telefon funktioniert)

Wir arbeiten an unserer ersten Android-App und es war eine sehr angenehme Erfahrung bisher. Es ist fast vollständig, aber vor der Veröffentlichung haben wir einige Überlegungen, vor allem über Android-Soft-Tastatur.

Wir haben ein paar EditText Felder, die verwendet werden, um Zahlen einzugeben. Wir möchten das Event erfassen, wenn der Benutzer drückt, und kalkuliert und korrigiert diesen Rückruf.

  • Quadratisches Layout auf GridLayoutManager für RecyclerView
  • Android-wie kann ich konvertieren android.net.Uri Objekt zu java.net.URI Objekt?
  • Wie kann Android App erkennen, welchen Laden es installiert hat?
  • Android AutoCompleteTextView mit benutzerdefinierter Adapterfilterung funktioniert nicht
  • Android WebView lädt keine URL
  • Ich bekomme einen Fehler "Die Methode zeigen (FragmentManager, String)"
  • Das Problem ist, dass wir keine feste Veranstaltung bekommen, da verschiedene Telefone verschiedene Keyboards haben. Einige haben 'Done' Button und unsere HTC Telefone haben 'Enter' Tasten. Wir haben versucht, die imeOptions als 'getan' zu verwenden, aber das hatte keine Auswirkung auf die HTC-Telefone.

    Wir wissen auch, dass die Tastatur entlassen werden kann, indem man die hintere Taste schlägt . Also meine Frage ist, wenn es eine zuverlässige Art zu wissen, wann der Benutzer aufgehört hat zu betreten oder wenn die Tastatur versteckt ist, wie TextFieldShouldReturn Rückruf in iphone sdk (die immer Feuer, wenn die Tastatur geht, unabhängig von dem, was Schlüssel verursacht es zu gehen Unten)

    Mit anderen Worten, wie ein Android-Entwickler behandelt Soft-Tastatur? Ich überprüfe auf KeyEvent.KEYCODE_ENTER auf editText onClick () -Ereignis und mach meine Aufgaben dort.Es arbeitet an meinem HTC Android, aber nicht auf meinem Freund Nexus Telefon, das eine fertige Taste anstelle von enter hat. Da wird OnClick nicht einmal angerufen. Wie kann ein Entwickler das behandeln?

    EDIT: Nach dem Verlust der Hälfte meiner Haare, und mit der Hilfe von einigen guten Freunden hier

    Ich habe alle Ihre Vorschläge ausprobiert, aber am Ende mit onEditorActionListener zusammen mit onKeyListener- Methode hat der Trick für mich. In onEdit Rückruf von onEditorActionListener habe ich auf KeyCode ACTION_DONE überprüft , die auf Keyboards mit getanem Button aufgerufen wurde. Auf den Tastaturen, die eingegeben werden, wird aufgerufen. Bei der onKey-Methode habe ich auch auf KEYCODE_BACK eingecheckt , damit auch das Hardware-Back-Pressereignis gehandhabt werden kann. Ich habe noch nicht herausgefunden, ein Android-Gerät mit getan und geben Sie auf der Tastatur (ernst), noch habe ich sogar behandelt, dass Fall mit einer Flagge. Danke @Femi für den Vorschlag auf onEditorActionListener, und vielen Dank für alle Freunde für Ihre Hilfe. Aber die Antwort auf meine ursprüngliche Frage

    Q: Gibt es eine zuverlässige und einfachere Art und Weise zu wissen, Android-Soft-Tastatur resigniert (Rückruf, die auf jedem Telefon funktioniert)

    Ans: Nein, alle Methoden sind hier vorgeschlagen und alle Methoden, die auf anderen Seiten vorgeschlagen werden, sind nicht einfach. Und ich denke, ein Event für Keyboard Return Key ist die grundlegendste Sache für jedes Betriebssystem. Google, bist du da?

  • FEHLER: Android Source Generator: AndroidManifest.xml Datei nicht gefunden
  • Machen Sie ein mittleres Element, um in den Header zu stecken (ScrollView / ListView)
  • In android gibt es irgendeine Möglichkeit, SharedPreferences nach einer Deinstallation zu bewahren
  • Wie benutzt man die neue Manifest-Fusion (von Android Studio und Gradle)?
  • App nicht in Visual Studio Emulator für Android in Visual Studio 2015 laufen
  • CollapsingToolbarLayout setTitle () wird nicht aktualisiert, wenn nicht zusammengebrochen
  • 7 Solutions collect form web for “Zuverlässige Art zu wissen, wann die androide Softtastatur zurücktritt (Rückruf, der an jedem Telefon funktioniert)”

    Da es scheint, dass Sie das KEYCODE_ENTER- Ereignis auffangen , können Sie dies verwenden: http://developer.android.com/reference/android/widget/TextView.html#setOnEditorActionListener%28android.widget.TextView.OnEditorActionListener%29 . In der Theorie können Sie erkennen, was auch immer die Eingabemethode Ende Aktion ist (ob seine Rückseite, getan, geben Sie, oder was auch immer) und darauf reagieren.

    Lassen Sie mich wissen, ob das für Sie arbeitet.

    Möchten Sie diese Berechnungen auch nicht ausführen, wenn der Benutzer die TextView auf einer Hardware-Tastatur verlässt? Ich würde mich nicht auf die Tastatur konzentrieren, sondern auf die TextView selbst. Wenn ja, was Sie wahrscheinlich wollen, ist setTransformationMethod

    Sie müssten eine benutzerdefinierte TransformationMethod implementieren, speziell die Methode getTransformation, die eine Quell-CharSequenz in eine andere umwandelt. Sie können dann die onFocusChanged verwenden, um dies nur anzuwenden, wenn der Fokus für diese TextView verloren geht.

    Ich habe eine Lösung auf dieser SO-Seite gefunden: Intercept Back-Taste von der Soft-Tastatur

    Die Antwort von mhradek hat 0 Stimmen, aber es scheint zu funktionieren.

    Die Idee besteht darin, das Basislayout Ihrer Aktivität zu erweitern, damit Sie die DispatchKeyEventPreIme-Methode überschreiben und was Sie über das KeyEvent übergeben möchten. Beachten Sie, dass Sie für die Verwaltung der Softtastatur verantwortlich sind.

    Ich benutze es und ich kann definitiv Tastenanschläge abfangen (die Back-Taste zum Beispiel) ohne die weiche Tastatur "essen" sie. Ich habe noch mehr damit zu spielen, um zu sehen, was möglich ist und was nicht ist.

    Ich hoffe, es hilft.

    Haben Sie versucht, die benutzerdefinierte EditText-Ansicht zu implementieren, wo Sie dispatchKeyEventPreIme überschreiben? Genau wie bei der Antwort von Arnaud (Verweis auf Intercept Back Button von Soft-Tastatur ), aber anstatt mit benutzerdefinierten Layout verwenden benutzerdefinierte EditText und Override:

    @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if(KeyEvent.KEYCODE_BACK == event.getKeyCode()) { //this hides soft keyboard in super.dispatchKeyEventPreIme(event) } return super.dispatchKeyEventPreIme(event); } 

    Ich habe diese Lösung in dieser Frage vorgeschlagen

    Ich kann nicht glauben, Google hat nicht eine Tastatur unabhängig Rückruf für diesen Fall

    Wow, ich kann nicht glauben, dass auch nicht. Ich habe ein ähnliches Problem im Moment. Zusätzlich zur IME ACTION prüfe ich auf Fokusänderungen auf den EditFields. Das ist gut für die meiste Zeit, aber wird nicht immer funktionieren.

    Ich habe einen Weg gefunden, um benachrichtigt zu werden, wenn die Tastatur versteckt ist, aber es ist noch keine komplette Lösung (und ich bin mir nicht sicher ob es eine gute Idee ist), aber ich habe nicht die Zeit, um jetzt fortzufahren, also ich Dachte ich könnte den Anfang der Idee hier fallen lassen …:

    Schreiben Sie Ihren eigenen EditText (erweitern Sie EditText) und überschreiben Sie onCreateInputConnection . In Ihrer onCreateInputConnection geben Sie Ihre eigene Implementierung von InputConnection (Sie können einfach BasicInputConnection erweitern. Die InputConnections "finishComposingText ()" Methode wird immer aufgerufen, wenn die Tastatur ausgeblendet wird (auch wenn der Benutzer die Back-Taste drückt).

    Dies ist der Code, und vielleicht hat jemand anderes eine Idee, warum der eingegebene Text nicht in diesem Editierfeld angezeigt wird 😉

     public class MyEditText extends EditText{ public MyEditText(Context context) { super(context); } public MyEditText(Context context, AttributeSet attrs) { super(context); } public MyEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { System.out.println("onCreateInputConnection, "+outAttrs.actionId); return new MyInputConnection(this,true); } private class MyInputConnection extends BaseInputConnection{ public MyInputConnection(View targetView, boolean fullEditor) { super(targetView, fullEditor); } @Override public boolean finishComposingText() { System.out.println("FINISH"); return super.finishComposingText(); } } } 

    JPM

    Ich habe das nicht ausprobiert, aber die Dokumentation zu lesen, scheint es möglich zu sein.

     // From an activity, you can call if (getResources().getConfiguration().keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) { // your code here } 

    Dieser Code funktioniert gut für mich mit HTC und Standard-Android-Tastatur:

     editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // handle enter key on keyboard if (actionId == EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN)) { if (uid != null) { // hide keyboard InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); // perform other stuff return true; } } return false; } }); 

    Verwendung der folgenden in der editText's XML:

     android:imeOptions="actionSend" 

    Natürlich könntest du auch etwas anderes wie Sende benutzen, einfach nur sicher sein, es sowohl im XML- als auch im Java-Code zu ändern.

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.