Eu estou mudando o valor de um EditText
no keyListener
.
Mas quando eu mudo o texto, o cursor está se movendo para o início do EditText
. Eu preciso que o cursor esteja no final do texto.
Como mover o cursor para o final do texto em a EditText
.
Eu estou mudando o valor de um EditText
no keyListener
.
Mas quando eu mudo o texto, o cursor está se movendo para o início do EditText
. Eu preciso que o cursor esteja no final do texto.
Como mover o cursor para o final do texto em a EditText
.
EditText
s como itens de aListView
. Quanto à experimentação, fiz algumas alterações noListView
próprio código-fonte, que é uma fera bastante complexa, e testei no emulador. Estava relacionado ao gerenciamento de controle de foco feito pelo componente. Portanto, é claro que não é uma solução que eu poderia dar para ajudar nosso amigo. :)OnFocusChanged
retorno de chamada. A solução é colocar setSelection dentro de um executável e executá-lo no thread principal. Confira aqui stackoverflow.com/a/32156989/4514796Respostas:
Tente o seguinte:
fonte
onSelectionChanged()
método de umaEditText
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); }
Existe uma função chamada append para ediitext que acrescenta o valor da string ao valor atual do edittext e coloca o cursor no final do valor. Você pode ter o valor da string como o próprio valor atual do ediitext e chamar append ();
fonte
myedittext.append("");
myedittext.append("");
não funcionou para mim!Selection
é a maneira correta de atingir esse IMO.Kotlin :
coloque o cursor na posição inicial :
defina o cursor para o final do EditText :
Abaixo, o código deve colocar o cursor após o segundo caractere:
JAVA :
coloque o cursor na posição inicial :
defina o cursor para o final do EditText :
Abaixo, o código deve colocar o cursor após o segundo caractere:
fonte
findViewById(R.id.edittext_id) as EditText
comfindViewById<EditText>(R.id.edittext_id)
ou apenas evitar a fundição se estiver usandoAPI 26+
Se você telefonou
setText
antes e o novo texto não recebeu a chamada da fase de layoutsetSelection
em um executável separado acionado porView.post(Runnable)
(repost deste tópico).Então, para mim, esse código funciona:
Editar 16/05/2019: No momento, estou usando a extensão Kotlin para isso:
e depois - editText.placeCursorToEnd ().
fonte
Você também pode colocar o cursor no final do texto na
EditText
exibição da seguinte maneira:fonte
fonte
Essa é outra solução possível:
Apenas tente esta solução se não funcionar por qualquer motivo:
fonte
Funciona bem para mim!
fonte
No meu caso, criei o seguinte kotlin ext. função, pode ser útil para alguém
Em seguida, use da seguinte maneira
fonte
Se o seu EditText não estiver claro:
ou
fonte
Você deve conseguir isso com a ajuda do
EditText's
métodosetSelection()
, veja aquifonte
Eu acho que isso pode conseguir o que você quer.
fonte
A pergunta é antiga e respondida, mas acho que pode ser útil ter essa resposta se você quiser usar as ferramentas DataBinding recém-lançadas para Android, basta definir isso em seu XML:
fonte
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
Cursorfonte
Se você quiser selecionar todo o texto e apenas inserir um novo texto em vez do antigo, use
fonte
Isso funciona
fonte
editText.setSelection
é a mágica aqui. Basicamente, a seleção permite colocar o cursor em qualquer posição desejada.Isso coloca o cursor no final do EditText. Basicamente,
editText.getText().length()
fornece o tamanho do texto. Então você usasetSelection
com comprimento.editText.setSelection(0);
É para definir o cursor na posição inicial (0).
fonte
Todos os outros códigos que testei não funcionaram bem devido ao fato de o usuário ainda poder colocar o cursor / cursor em qualquer lugar no meio da string (por exemplo: 12 | 3.00 - onde | é o cursor). Minha solução sempre coloca o cursor no final da string sempre que o toque ocorre no EditText.
A solução final é:
@ string / quantidade = "0,00" @ string / zero_value = "0,00"
Espero que ajude!
fonte
Para ViewModel, LiveData e ligação de dados
Eu precisava dessa funcionalidade para
EditText
suporte multilinhas no meu aplicativo de anotações. Eu queria o cursor no final do texto quando o usuário navega para o fragmento que possui o texto da nota.A solução sugerida pelo djleop chega perto. Mas o problema é que, se o usuário colocar o cursor em algum lugar no meio do texto para edição e começar a digitar, o cursor saltará para o final do texto novamente. Isso aconteceu porque o
LiveData
comando emitia o novo valor e o cursor pularia novamente para o final do texto, resultando no usuário não capaz de editar o texto em algum lugar no meio.Para resolver isso, eu uso
MediatorLiveData
e atribuo o comprimentoString
apenas uma vez usando um sinalizador. Isso fará com que o LiveData leia o valor apenas uma vez, ou seja, quando o usuário navega para o fragmento. Depois disso, o usuário pode colocar o cursor em qualquer lugar que desejar editar o texto lá.ViewModel
Aqui
yourObject
está outro LiveData recuperado do banco de dados que contém o texto String que você está exibindo noEditText
.Em seguida, vincule isso
MediatorLiveData
ao seu EditText usando o adaptador de ligação.XML
Utiliza ligação de dados bidirecional para exibir texto e também para aceitar a entrada de texto.
Adaptador de ligação
Event
classeA
Event
classe aqui é como um SingleLiveEvent escrito por Jose Alcérreca do Google. Eu o uso aqui para cuidar da rotação da tela. O uso do singleEvent
garantirá que o cursor não vá para o final do texto quando o usuário estiver editando o texto em algum lugar no meio e a tela girar. Ele manterá a mesma posição quando a tela girar.Aqui está a
Event
turma:Esta é a solução que funciona para mim e fornece uma boa experiência do usuário. Espero que ajude em seus projetos também.
fonte
semelhante à resposta de @Anh Duy, mas não funcionou para mim. Eu também precisava que o cursor se movesse até o fim somente quando o usuário tocar no texto de edição e ainda conseguir selecionar a posição do cursor depois, esse é o único código que funcionou para mim
fonte
Isso faz o truque com segurança :
fonte
fonte
As respostas acima não funcionaram para mim. Então eu descobri uma nova solução. Isso talvez seja útil para alguém. Estou usando a versão mais recente do Android Studio, ou seja, 3.5, conforme a data atual. Talvez essa seja a razão pelas quais as respostas acima não tenham mostrado efeito.
CÓDIGO:
Aqui, o primeiro argumento é o valor do texto Spannable que você deseja reproduzir, enquanto o segundo argumento é o valor do índice. Como queremos o cursor no final do texto, pegamos getText (). Length () que retorna o tamanho do texto
fonte
Use este CustomEditText no seu arquivo XML, isso funcionará. Eu testei isso e está funcionando para mim.
fonte
Se você deseja colocar o cursor no final do texto na visualização EditText
fonte