La réponse fournie par @Andreas Rudolph contient un bug critique et ne devrait pas être utilisée. Le code provoque un IndexOutOfBoundsException
lorsque vous passez du texte à l'intérieur du EditText
qui contient plusieurs caractères de nouvelle ligne. Cela est dû au type de boucle utilisé, la boucle Editable
appellera l'objet afterTextChanged
dès que son contenu est modifié (remplacement, suppression, insertion).
Code correct :
edittext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
/*
* The loop is in reverse for a purpose,
* each replace or delete call on the Editable will cause
* the afterTextChanged method to be called again.
* Hence the return statement after the first removal.
* http://developer.android.com/reference/android/text/TextWatcher.html#afterTextChanged(android.text.Editable)
*/
for(int i = s.length()-1; i >= 0; i--){
if(s.charAt(i) == '\n'){
s.delete(i, i + 1);
return;
}
}
}
});
11 votes
Ajoutez simplement Android:inputType="textPersonName" à l'EditText pour l'empêcher d'appuyer sur la touche Entrée.