2009-10-08 10 views
24

Was ich tun möchte, ist die Standard "Done" -Etikette ändern, die in der virtuellen Tastatur angezeigt wird. Hier ist, was ich ohne Erfolg versucht haben:Android: Ich kann mir nicht vorstellen, wie setImeActionLabel zu verwenden ist

mSearchInput.setImeOptions(EditorInfo.IME_ACTION_DONE); 
mSearchInput.setImeActionLabel(getString(R.string.search_action_label), EditorInfo.IME_ACTION_DONE); 

I am können jedoch einen Klick auf diese Schaltfläche zu handhaben, mit diesem:

mSearchInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      performSearch(); 
      return true; 
     } 
     return false; 
    } 
}); 

Ich bin ratlos, wie Ich kann das Label auf diesem Button im Moment ändern.

Antwort

25

Die imeActionLabel legt das Label für die Schaltfläche fest, die rechts oben im Vollbild-IME-Modus angezeigt wird (d. H. Wenn sich das Telefon im Querformat befindet). Wenn Sie die Schaltfläche unten rechts auf der Tastatur ändern möchten, können Sie bestimmte Flags an imeOptions übergeben.

Soweit ich weiß, für diese Schaltfläche sind Sie auf eine bestimmte Reihe von Aktionen beschränkt (siehe here für eine vollständige Liste der unterstützten Flags), aber da Sie eine Suchschaltfläche scheinen wollen, alles was Sie tun müssen ist Ihre erste Linie leicht anpassen und IME_ACTION_SEARCH verwenden:

mSearchInput.setImeOptions(EditorInfo.IME_ACTION_SEARCH); 

Wohlgemerkt das genaue Aussehen dieser Taste auf der Eingabemethode abhängen. Die Standard-Android-Tastatur zeigt eine Lupe für das Such-Flag, während die Touch-Eingabe (HTC-Tastatur) das Flag völlig ignoriert und immer noch eine Zurück-Taste zeigt.

+0

Das ist neugierig. Wenn ich im Emulator auf Landscape umschalte, erscheint die Soft-Tastatur nicht mehr. Auch habe ich festgestellt, dass die Messaging-Anwendung zum Beispiel ein Smiley (":-)") anstelle der Schaltfläche "Fertig" setzt. Verwendet es ein benutzerdefiniertes Tastaturlayout oder was? Danke für den Tipp, übrigens. – Felix

+3

Die Soft-Tastatur wird nicht angezeigt, da der Emulator eine physische Tastatur im Querformat simuliert (so wie die Soft-Tastatur nicht auf einem G1 angezeigt wird, wenn Sie sie aufklappen). Sie können die Tastatur deaktivieren, indem Sie die Datei config.ini für AVD mit 'hw.keyboard = no 'ändern. Wie für die Messaging-Anwendung, habe ich nur seine Quelle überprüft, und ich denke, der Smiley ist ein Nebenprodukt von 'inputType =" textShortMessage "' und das Fehlen einer Schaltfläche "Senden" ist wegen 'imeOptions =" flagNoEnterAction "', aber ich habe es nicht wirklich getestet. Wohlgemerkt, Touch Input scheint beide Flags zu ignorieren. – mernen

+2

Aus dem Code in der ursprünglichen Frage können Sie eine "Return" -Schaltfläche einer physischen Tastatur berücksichtigen, wenn Sie nur diesen "ODER" -Code hinzufügen: if (actionId == EditorInfo.IME_ACTION_SEARCH || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) – CircuitBreaker716