Depois de atualizar alguns de nossos dispositivos para o Android 8.0, ao focar em um TextInputEditText
campo dentro de um TextInputLayout
, o aplicativo trava com o seguinte Exception
:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.view.View.getBoundsOnScreen(android.graphics.Rect)' on a null object reference
at android.app.assist.AssistStructure$WindowNode.(AssistStructure.java)
at android.app.assist.AssistStructure.(AssistStructure.java)
at android.app.ActivityThread.handleRequestAssistContextExtras(ActivityThread.java:3035)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1807)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Quando vamos para Configurações do Android -> Sistema -> Idiomas e entrada -> Avançado -> Serviço de preenchimento automático -> Nenhum , em seguida, enfocando o TextInputEditText
/
TextInputLayout
não travamentos.
Como podemos evitar que o travamento aconteça sem ter que desabilitar o novo serviço de preenchimento automático 8.0 nos dispositivos?
android
android-edittext
android-8.0-oreo
android-textinputlayout
Jesobremonte
fonte
fonte
Respostas:
Eu também corri para isso. Acontece que o problema foi causado pela configuração do texto de dica
EditText
aninhado dentro deTextInputLayout
.Eu fiz algumas pesquisas e encontrei este pepino nas notas de lançamento do Beta 2 de 26.0.0. Notas de versão de suporte do Android, junho de 2017
Isso me levou a tentar definir a dica no em
TextInputLayout
vez do aninhadoEditText
.Isso resolveu o problema de travamento para mim. Exemplo:
Eu postei isso como uma resposta aqui enquanto confundia os favoritos. Desculpe por postar a mesma resposta duas vezes.
fonte
Adicione o atributo mencionado abaixo em
EditText
:android:importantForAutofill="noExcludeDescendants"
fonte
Luke Simpson quase acertou, apenas deveria usar "styles.xml" em vez de "themes.xml".
Criei um novo arquivo de estilo com qualificador de versão, visando a v26, para deixar mais claro.
Basta copiar e colar
AppTheme
no v26 / styles.xml e adicionareditTextStyle
itens aoEditTextStyle
estilo.Desta forma, você faz essas alterações para todos os seus EditTexts sem a necessidade de alterar seus arquivos de layout.
fonte
Você pode definir qualquer valor para importantForAutofill com um estilo ou no XML é corrigido para NPE quando você focaliza o EditText, mas não é corrigido se você pressionar longamente o EditText e clicar em AutoFill. Encontrei um relatório de bug sobre esse bug aqui , por favor, adicione uma estrela e compartilhe suas observações no relatório de bug.
THX.
fonte
Usei v26 / themes.xml para substituir o preenchimento automático de estilo EditText apenas para Oreo 8.0.0:
Observe que eu tive que aplicar o estilo inline para cada EditText em meu layout xml para que ele tivesse efeito. Tentei aplicar essa mudança globalmente no tema do meu aplicativo, mas não funcionou por algum motivo.
fonte
@Luke Simpson está certo. Você pode usá-lo em themes.XML como: -
em V26 / app_styles.xml
Mas, eu tive que colocar a tag vazia também em app_styles.xml na pasta padrão. Caso contrário, todas as propriedades de Editar texto estavam sendo substituídas por isso e meu texto de edição não estava funcionando corretamente. E quando você coloca a propriedade importantForAutoFill para v26 e deseja que o preenchimento automático funcione na 8.1, pode simplesmente colocar
Portanto, a propriedade de preenchimento automático funciona em 8.1. Ele será desabilitado apenas no 8.0, pois a falha está ocorrendo no 8.0 e já foi corrigido no 8.1.
fonte
Se alguém ainda quiser " hint " em " TextInputEditText ", faça o app: hintEnabled = "false" em TextInputLayout
fonte
Também enfrentei esse problema e finalmente descobrimos o motivo da falha no Android 8.0 e no Android 8.1.
primeira razão (dica importante): dica vazia (android: hint = "") em xml leva a travar no dispositivo oreo. Remova esta dica vazia em editText na pesquisa de projeto inteiro.
segunda razão (igual à explicação acima): certifique-se de que sua dica editText deve ser exibida dentro de TextInputLayout se você tiver usado TextInputLayout, caso contrário, você pode usar hint dentro de editText.
Espero que isso ajude você !!
Obrigado
fonte