2010-08-17 6 views
2

Actuellement, j'ai un champ edittext que lorsque l'utilisateur appuie sur Entrée, il fait la plupart du temps ce que je veux, valider un format d'adresse IP et informer l'utilisateur si elle est erronée. Comment est-ce que je le fais quand l'utilisateur appuie sur entrer il le vérifie comme il est censé être NE PAS entrer le caractère de nouvelle ligne?Android EditText: Auditeurs, Newline caractères, et Focus

Voici mon code pour cela.

public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { 
     if(validateIPaddress(m_etIPAddress.getText().toString())) 
     { 
      ConfigData.m_IPAddress = m_etIPAddress.getText().toString(); 
     } 
     else 
     { 
      showAlertDialog("Invalid IP Address\n Example: \n255.255.255.255\n0.0.0.0","Error: "); 
      m_etIPAddress.setText(ConfigData.m_IPAddress); 
      m_etIPAddress.requestFocus(); 
     } 
     return false; 
    } 

Un autre problème est que je dans le faux état de la validation, qu'il ne sera pas afficher le clavier souple pour permettre à l'utilisateur de rééditer ce champ de texte. Si l'utilisateur clique sur un autre texte d'édition, la fenêtre lui donne le focus, et permet à l'utilisateur d'éditer le deuxième champ de texte tout en maintenant le 'contour vert' autour de l'édition originale. Y'a t'il un moyen d'arranger cela?

EDIT:

Merci pour la réponse. L'EditText crée toujours un saut de ligne. J'ai essayé d'appeler que lorsque je crée le EditText et il montre la boîte de dialogue insère ensuite un saut de ligne au début .. ce qui est bizarre parce que le

m_etIPAddress.setText(ConfigData.m_IPAddress); 

devrait remplacer automatiquement quelque chose dans ce domaine à l'adresse IP statique enregistré dans ConfigData . (mes paramètres de classe) et je pense que l'accent pourrait fonctionner, le problème est qu'après requestFocus, EditText montre qu'il a le focus mais ne répond pas.

Je peux cliquer sur d'autres EditText et les modifier, tout en affichant le contour du focus sur l'IP EditText. Si je clique sur le IP EditText, il ne fait rien. C'est un peu étrange.

Répondre

4

Je pense que pour votre EditText créer une nouvelle ligne, vous pouvez le faire en remplaçant le bouton entrer par un bouton fait comme ça:

yourEditText.setImeOptions(EditorInfo.IME_ACTION_DONE); 

Et pour aller avec cela, vous pouvez mettre cela à votre xml fichier décrivant votre EditText:

android:maxLines="1" 
+0

Et si le focus ne vient pas, vous pouvez essayer .dispatchTouchEvent sur le EditText, peut-être cela peut simuler un clic sur le EditText, mais requestFous devrait fonctionner ... – Sephy

+0

J'ai essayé d'ajouter à la fois, et il ne permet pas à l'edittext de grandir ce qui est génial, mais il ll ajoute le caractère de retour à la ligne, ce qui provoque l'invalidation de l'adresse IP. Si je supprime les lignes max définies, l'edittext grandit et ajoute toujours un caractère de nouvelle ligne. – TxAg

+0

Donc, il semble que ce soit juste le téléphone que j'utilise pour tester. Parce que l'émulateur Android change le bouton d'un retour à fait, mais quand je l'ai testé sur le HTC Incredible ce n'est pas le cas. – TxAg