Je change la valeur d'une EditText
sur keyListener
.
Mais lorsque je change de texte, le curseur se déplace au début de la EditText
. J'ai besoin que le curseur se trouve à la fin du texte.
Comment déplacer le curseur à la fin du texte dans une EditText
.
Essaye ça:
EditText et = (EditText)findViewById(R.id.inbox);
et.setSelection(et.getText().length());
Il existe une fonction appelée append pour ediitext qui ajoute la valeur de chaîne à la valeur actuelle d'edittext et place le curseur à la fin de la valeur . Vous pouvez définir la valeur de chaîne comme valeur actuelle d'editeite et appeler append ();
myedittext.append("current_this_edittext_string");
Kotlin :
placez le curseur sur la position de départ :
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
positionnez le curseur sur la fin de de EditText :
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.getText().length())
Le code ci-dessous consiste à placer le curseur après le deuxième caractère:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
Java :
placez le curseur sur la position de départ :
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
positionnez le curseur sur la fin de de EditText :
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
Le code ci-dessous consiste à placer le curseur après le deuxième caractère:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
Si vous avez appelé setText
auparavant et que le nouveau texte ne comporte pas de phase de mise en page, appelez setSelection
dans un fichier exécutable séparé, déclenché par View.post(Runnable)
(republié à partir de this topic).
Donc, pour moi, ce code fonctionne:
editText.setText("text");
editText.post(new Runnable() {
@Override
public void run() {
registerPhone.setSelection("text".length());
}
});
Vous pouvez également placer le curseur à la fin du texte dans la vue EditText
comme ceci:
EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
editText.setSelection(editText.getText().length());
return false;
}
});
C'est une autre solution possible:
et.append("");
Essayez cette solution si cela ne fonctionne pas pour une raison quelconque:
et.setSelection(et.getText().length());
Dans mon cas, j'ai créé le kotlin ext suivant. fonction, peut être utile à quelqu'un
private fun EditText.focus(){
requestFocus()
setSelection(length())
}
Puis utilisez comme suit
mEditText.focus()
Vous devriez pouvoir y parvenir avec la méthode setSelection () de EditText, voir ici
je pense que cela peut réaliser ce que vous voulez.
Editable etext = mSubjectTextEditor.getText();
Selection.setSelection(etext, etext.length());
/**
* Set cursor to end of text in edittext when user clicks Next on Keyboard.
*/
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (b) {
((EditText) view).setSelection(((EditText) view).getText().length());
}
}
};
mEditFirstName.setOnFocusChangeListener(onFocusChangeListener);
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);
Cela fonctionne bien pour moi!
Si votre EditText n'est pas clair:
editText.setText("");
editText.append("New text");
La question est ancienne et a reçu une réponse, mais je pense qu'il peut être utile de disposer de cette réponse si vous souhaitez utiliser les nouveaux outils DataBinding pour Android, définissez-le simplement dans votre XML:
<data>
<variable name="stringValue" type="String"/>
</data>
...
<EditText
...
Android:text="@={stringValue}"
Android:selection="@{stringValue.length()}"
...
/>
Bonjour essayer ceci
<EditText
Android:id="@+id/edt_text"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Hello World!"
Android:cursorVisible="true"/>
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length()); // End point
curseur
Tous les autres codes que j'ai testés ne fonctionnaient pas correctement car l'utilisateur pouvait toujours placer le curseur d'insertion/curseur n'importe où au milieu de la chaîne (ex: 12 | 3.00 - où | est le curseur). Ma solution place toujours le curseur à la fin de la chaîne chaque fois que le contact a lieu sur le texte d'édition.
La solution ultime est:
// For a EditText like:
<EditText
Android:id="@+id/EditTextAmount"
Android:layout_height="wrap_content"
Android:layout_width="fill_parent"
Android:hint="@string/amount"
Android:layout_weight="1"
Android:text="@string/zero_value"
Android:inputType="text|numberDecimal"
Android:maxLength="13"/>
@ string/amount = "0.00" @ string/zero_value = "0.00"
// Create a Static boolean flag
private static boolean returnNext;
// Set caret/cursor to the end on focus change
EditTextAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View editText, boolean hasFocus) {
if(hasFocus){
((EditText) editText).setSelection(((EditText) editText).getText().length());
}
}
});
// Create a touch listener and put caret to the end (no matter where the user touched in the middle of the string)
EditTextAmount.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View editText, MotionEvent event) {
((EditText) editText).onTouchEvent(event);
((EditText) editText).setSelection(((EditText) editText).getText().length());
return true;
}
});
// Implement a Currency Mask with addTextChangedListener
EditTextAmount.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String input = s.toString();
String output = new String();
String buffer = new String();
String decimals = new String();
String numbers = Integer.toString(Integer.parseInt(input.replaceAll("[^0-9]", "")));
if(returnNext){
returnNext = false;
return;
}
returnNext = true;
if (numbers.equals("0")){
output += "0.00";
}
else if (numbers.length() <= 2){
output += "0." + String.format("%02d", Integer.parseInt(numbers));
}
else if(numbers.length() >= 3){
decimals = numbers.substring(numbers.length() - 2);
int commaCounter = 0;
for(int i=numbers.length()-3; i>=0; i--){
if(commaCounter == 3){
buffer += ",";
commaCounter = 0;
}
buffer += numbers.charAt(i);
commaCounter++;
}
output = new StringBuilder(buffer).reverse().toString() + "." + decimals;
}
EditTextAmount.setText(output);
EditTextAmount.setSelection(EditTextAmount.getText().length());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
/*String input = s.toString();
if(input.equals("0.0")){
EditTextAmount.setText("0.00");
EditTextAmount.setSelection(EditTextAmount.getText().length());
return;
}*/
}
@Override
public void afterTextChanged(Editable s) {
}
});
J'espère que ça aide!
Cela marche
Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
Si vous voulez sélectionner tout le texte et simplement entrer du nouveau texte au lieu de l'ancien, vous pouvez
Android:selectAllOnFocus="true"
Cela fait l'affaire en toute sécurité :
editText.setText("");
if (!TextUtils.isEmpty(text)) {
editText.append(text);
}
similaire à la réponse de @Anh Duy, mais cela n'a pas fonctionné pour moi. J'avais également besoin du curseur pour aller à la fin seulement lorsque l'utilisateur tapait sur le texte d'édition et pouvait toujours sélectionner la position du curseur par la suite, c'est le seul code qui a fonctionné pour moi.
boolean textFocus = false; //define somewhere globally in the class
//in onFinishInflate() or somewhere
editText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
editText.onTouchEvent(event);
if(!textFocus) {
editText.setSelection(editText.getText().length());
textFocus = true;
}
return true;
}
});
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
textFocus = false;
}
});
etSSID.setSelection(etSSID.getText().length());
Si vous voulez placer le curseur à la fin du texte en mode EditText
EditText rename;
String title = "title_goes_here";
int counts = (int) title.length();
rename.setSelection(counts);
rename.setText(title);