Gosto que minhas IUs sejam intuitivas; cada tela deve orientar o usuário de maneira natural e discreta para a próxima etapa do aplicativo. Exceto isso, eu me esforço para tornar as coisas o mais confusas e confusas possíveis.
Só brincando :-)
Eu tenho três TableRow
s, cada um contendo um controle EditText somente leitura e não focalizável e um botão à sua direita. Cada botão inicia a mesma atividade, mas com um argumento diferente. O usuário faz uma seleção lá e a subatividade termina, preenchendo o apropriado EditText
com a seleção do usuário.
É o mecanismo clássico de valores em cascata; cada seleção restringe as opções disponíveis para a próxima seleção, etc. Portanto, estou desabilitando os dois controles em cada uma das próximas linhas até que EditText na linha atual contenha um valor.
Preciso fazer uma de duas coisas, nesta ordem de preferência:
- Quando um botão é clicado, imediatamente remove o foco sem definir o foco para um botão diferente
- Defina o foco para o primeiro botão quando a atividade começar
O problema se manifesta após o retorno da subatividade; o botão clicado mantém o foco.
Re: nº 1 acima - não parece ser um removeFocus()
método ou algo semelhante
Re: nº 2 acima - posso usar requestFocus()
para definir o foco para o botão na próxima linha, e isso funciona depois que a subatividade retorna, mas por algum motivo não funciona na atividade pai onCreate()
.
Preciso da consistência da IU em qualquer direção - nenhum botão tem foco depois que a subatividade termina ou cada botão recebe o foco dependendo de seu lugar no fluxo lógico, incluindo o primeiro (e único) botão ativo antes de qualquer seleção.
fonte
Pergunta antiga, mas me deparei com ela quando tive um problema semelhante e pensei em compartilhar o que acabei fazendo.
A visão que ganhou foco era diferente a cada vez, então usei o muito genérico:
fonte
getCurrentFocus()?.clearFocus();
, tão bonito e elegante: - /Você pode usar
View.clearFocus()
.Use
View.requestFocus()
chamadas deonResume()
.fonte
android:descendantFocusability="beforeDescendants"
usar o seguinte na atividade com algumas opções de layout abaixo pareceu funcionar conforme desejado.
em conexão com os seguintes parâmetros na visualização raiz.
https://developer.android.com/reference/android/view/ViewGroup#attr_android:descendantFocusability
Responda com agradecimento a: https://forums.xamarin.com/discussion/1856/how-to-disable-auto-focus-on-edit-text
Sobre windowSoftInputMode
fonte
Eu uso isso quando já terminei de atualizar as informações do perfil e remover todo o foco de EditText no meu layout
====> Atualizar: No conteúdo do layout pai, minha linha de adicionar EditText:
fonte
Que tal apenas adicionar
android:windowSoftInputMode="stateHidden"
sua atividade no manifesto.Retirado de um homem inteligente que comentou sobre isso: https://stackoverflow.com/a/2059394/956975
fonte
Em primeiro lugar, funcionará 100% ........
onResume()
Método de criação .onResume()
encontre a visão que está focalizando continuamentefindViewById()
.onResume()
conjuntorequestFocus()
para esta vista.onResume()
conjuntoclearFocus
para esta vista.focusable
verdadeira efocusableInTuch
verdadeira.onResume()
encontre a vista superior acima porfindViewById
onResume()
conjuntorequestFocus()
para esta vista no passado.fonte
Tentei desativar e ativar o foco para visualização e funcionou para mim (o foco foi redefinido):
fonte
Você pode tentar desligar a capacidade da Activity principal de salvar seu estado (fazendo com que ela esqueça qual controle tinha texto e qual tinha foco). Você precisará ter alguma outra maneira de lembrar o que seu EditText tem e preenchê-lo novamente emResume (). Inicie suas sub-Activities com startActivityForResult () e crie um manipulador onActivityResult () em sua Activity principal que atualizará o EditText corretamente. Desta forma, você pode definir o botão adequado que deseja colocar em foco emResume () ao mesmo tempo em que preenche novamente o EditText usando um myButton.post (new Runnable () {run () {myButton.requestFocus ();}});
O método View.post () é útil para definir o foco inicialmente porque esse executável será executado depois que a janela for criada e as coisas se acalmarem, permitindo que o mecanismo de foco funcione corretamente naquele momento. Tentar definir o foco durante onCreate / Start / Resume () geralmente apresenta problemas, descobri.
Observe que este é um pseudocódigo e não foi testado, mas é uma direção possível que você pode tentar.
fonte
Adicione-os ao seu ViewGroup que inclui seu EditTextView. Funciona corretamente com o meu Layout de restrição. Espero que esta ajuda
fonte
Experimente o seguinte (ligando
clearAllEditTextFocuses();
)fonte