Je modifie la valeur d'un EditText
on keyListener
.
Mais quand je change le texte, le curseur se déplace vers le début du EditText
. J'ai besoin que le curseur soit à la fin du texte.
Comment déplacer le curseur à la fin du texte dans a EditText
.
EditText
s comme éléments d'unListView
. Quant à l'expérimentation, j'ai fait quelques changements sur leListView
code source lui-même, qui est une bête assez complexe, et testé sur l'émulateur. Elle était liée à la gestion du contrôle de la concentration effectuée par le composant. Alors bien sûr, ce n'est pas une solution que je pourrais donner pour aider notre ami. :)OnFocusChanged
rappel. La solution consiste à placer setSelection dans un exécutable et à l'exécuter sur le thread principal. Vérifiez ici stackoverflow.com/a/32156989/4514796Réponses:
Essaye ça:
la source
onSelectionChanged()
méthode d'uneEditText
classe:public void onSelectionChanged(int start, int end) { CharSequence text = getText(); if (text != null) { if (start != text.length() || end != text.length()) { setSelection(text.length(), text.length()); return; } } super.onSelectionChanged(start, end); }
Il existe une fonction appelée append pour ediitext qui ajoute la valeur de chaîne à la valeur edittext actuelle et place le curseur à la fin de la valeur. Vous pouvez avoir la valeur de chaîne comme valeur ediitext actuelle elle-même et appeler append ();
la source
myedittext.append("");
myedittext.append("");
n'a pas fonctionné pour moi!Selection
est la bonne façon de réaliser cette OMI.Kotlin :
placez le curseur sur la position de départ :
placez le curseur à la fin du EditText :
Sous Code, vous placez le curseur après le deuxième caractère:
JAVA :
placez le curseur sur la position de départ :
placez le curseur à la fin du EditText :
Sous Code, vous placez le curseur après le deuxième caractère:
la source
findViewById(R.id.edittext_id) as EditText
avecfindViewById<EditText>(R.id.edittext_id)
ou tout simplement éviter la coulée si vous utilisezAPI 26+
Si vous avez appelé
setText
auparavant et que le nouveau texte n'a pas reçu d'appel de phase de mise en pagesetSelection
dans un exécutable distinct déclenché parView.post(Runnable)
(republier à partir de cette rubrique).Donc, pour moi, ce code fonctionne:
Edit 16/05/2019: En ce moment j'utilise l'extension Kotlin pour ça:
puis - editText.placeCursorToEnd ().
la source
Vous pouvez également placer le curseur à la fin du texte dans la
EditText
vue comme ceci:la source
la source
Ceci est une autre solution possible:
Essayez cette solution si elle ne fonctionne pas pour une raison quelconque:
la source
Ça marche bien pour moi!
la source
Dans mon cas, j'ai créé le kotlin ext suivant. fonction, peut être utile à quelqu'un
Ensuite, utilisez comme suit
la source
Si votre EditText n'est pas clair:
ou
la source
Vous devriez pouvoir y parvenir à l'aide de la
EditText's
méthodesetSelection()
, voir icila source
je pense que cela peut réaliser ce que vous voulez.
la source
La question est ancienne et répondue, mais je pense qu'il peut être utile d'avoir cette réponse si vous souhaitez utiliser les nouveaux outils DataBinding pour Android, il suffit de définir cela dans votre XML:
la source
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
Le curseurla source
Si vous souhaitez sélectionner tout le texte et entrer simplement un nouveau texte au lieu de l'ancien, vous pouvez utiliser
la source
Cela marche
la source
editText.setSelection
est la magie ici. Fondamentalement, la sélection vous permet de placer le curseur à la position souhaitée.Cela place le curseur à la fin de EditText.
editText.getText().length()
Vous donne essentiellement la longueur du texte. Ensuite, vous utilisezsetSelection
avec longueur.editText.setSelection(0);
C'est pour placer le curseur à la position de départ (0).
la source
Tous les autres codes que j'ai testés ne fonctionnaient pas bien car l'utilisateur pouvait toujours placer le curseur / 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 toucher se produit sur le EditText.
La solution ultime est:
@ string / amount = "0.00" @ string / zero_value = "0.00"
J'espère que cela aide!
la source
Pour ViewModel, LiveData et liaison de données
J'avais besoin de cette fonctionnalité pour
EditText
avec le support multiligne dans mon application notes. Je voulais que le curseur se trouve à la fin du texte lorsque l'utilisateur accède au fragment contenant du texte de note.La solution proposée par le djleop se rapproche. Mais le problème avec cela est que, si l'utilisateur place le curseur quelque part au milieu du texte à modifier et commence à taper, le curseur sautera à la fin du texte à nouveau. Cela est arrivé parce que le
LiveData
émettrait la nouvelle valeur et le curseur sauterait à la fin du texte à nouveau, ce qui empêcherait l'utilisateur de modifier le texte quelque part au milieu.Pour résoudre ce problème, je l'utilise
MediatorLiveData
et lui attribue la longueur d'String
une seule fois à l'aide d'un indicateur. Cela provoquera la lecture de la valeur par LiveData une seule fois, c'est-à-dire lorsque l'utilisateur accède au fragment. Après cela, l'utilisateur peut placer le curseur là où il veut éditer le texte.ViewModel
Voici
yourObject
une autre LiveData extraite de la base de données qui contient le texte de chaîne que vous affichez dans leEditText
.MediatorLiveData
Liez ensuite cela à votre EditText à l'aide de l'adaptateur de liaison.XML
Utilise la liaison de données bidirectionnelle pour afficher le texte ainsi que pour accepter la saisie de texte.
Adaptateur de reliure
Event
classeLa
Event
classe ici est comme un SingleLiveEvent écrit par Jose Alcérreca de Google. Je l'utilise ici pour prendre en charge la rotation de l'écran. L'utilisation du singleEvent
garantit que le curseur ne sautera pas à la fin du texte lorsque l'utilisateur modifie le texte quelque part au milieu et que l'écran pivote. Il conservera la même position lorsque l'écran pivotera.Voici la
Event
classe:C'est la solution qui fonctionne pour moi et offre une bonne expérience utilisateur. J'espère que cela vous aidera aussi dans vos projets.
la source
similaire à la réponse de @Anh Duy, mais cela n'a pas fonctionné pour moi. J'ai également eu besoin que le curseur se déplace jusqu'à la fin uniquement lorsque l'utilisateur appuie sur le texte d'édition et qu'il est toujours possible de sélectionner la position du curseur par la suite, c'est le seul code qui a fonctionné pour moi
la source
Cela fait l'affaire en toute sécurité :
la source
la source
Les réponses ci-dessus n'ont pas fonctionné pour moi. J'ai donc découvert une nouvelle solution. Cela peut être utile à quelqu'un. J'utilise la dernière version d'Android Studio, c'est-à-dire 3.5 à la date actuelle. C'est peut-être la raison pour laquelle les réponses ci-dessus n'ont montré aucun effet.
CODE:
Ici, le 1er argument est la valeur de texte pouvant être étendue avec laquelle vous voulez jouer, tandis que le 2e argument est la valeur d'index. Depuis, nous voulons que le curseur soit à la fin du texte, nous avons pris getText (). Length () qui retourne la longueur du texte
la source
Utilisez ce CustomEditText dans votre fichier XML, cela fonctionnera. J'ai testé cela et cela fonctionne pour moi.
la source
Si vous souhaitez placer le curseur à la fin du texte dans la vue EditText
la source