2010-07-18 27 views
48

J'ai un texte d'édition défini comme suit.Android: Modifier le texte Bouton Go

<EditText 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:maxLines="1" 
android:inputType="text" 
android:hint="@string/field_text" 
android:id="@+id/field" 
/> 

Je veux définir une commande personnalisée de sorte que lorsque quelqu'un clique sur le bouton Terminé/Go sur le clavier à l'écran clique sur un bouton ou tout simplement exécuter les méthodes qui sont gérées par le bouton. Je pense que cela a quelque chose à voir avec les options ime, mais je n'ai pas été en mesure de comprendre comment ils fonctionnent. Merci d'avance pour votre aide!

Répondre

117

Vous voulez une combinaison d'Android: imeOptions et setOnEditorActionListener

<EditText android:id="@+id/some_edittext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:imeOptions="actionSend"> 
</EditText> 


some_edittext.setOnEditorActionListener(new OnEditorActionListener() { 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_SEND) { 
      some_button.performClick(); 
      return true; 
     } 
     return false; 
    } 
}); 

Il est évident que vous devez changer actionSend à l'action que vous voulez, et mettre à jour IME_ACTION_SEND en conséquence.

+1

Je voulais juste donner suite à cette réponse et mentionner que cela ne fonctionne pas nécessairement sur tous les appareils. Par exemple, j'ai changé mon code OnKeyListener pour utiliser OnEditorActionListener dans mon application et soudainement mon HTC Evo a cessé d'effectuer l'action. Voir ceci pour plus d'informations: http://stackoverflow.com/questions/3886677/imeoptions-on-htc-devices – Dan

+0

bon exemple .... – AndroidDanger

+0

Mais à l'aide de cet exemple, vous ne pouvez pas créer un multiligne editext.Comme un texte de chat, dans ce texte ajouté n'est pas Wrodwrap automatiquement. –