Ao usar setDuration () para um Toast, é possível definir um comprimento personalizado ou pelo menos algo mais do que Toast.LENGTH_LONG
?
android
android-toast
Hussein El Feky
fonte
fonte
toast
tag? Parece relevante para a pergunta ..toast
tag para. Eu pensei que as tags estavam lá para ajudar na pesquisa e classificação etoast
é definitivamente uma pesquisa comum.android
etoast
parece perfeito.Respostas:
Os valores de
LENGTH_SHORT
eLENGTH_LONG
são 0 e 1. Isso significa que eles são tratados como sinalizadores em vez de durações reais, então eu não acho que será possível definir a duração para algo diferente desses valores.Se você deseja exibir uma mensagem para o usuário por mais tempo, considere uma Notificação na Barra de Status . As notificações da barra de status podem ser canceladas programaticamente quando não forem mais relevantes.
fonte
Se você se aprofundar no código do Android, poderá encontrar as linhas que indicam claramente que não podemos alterar a duração da mensagem do Toast.
e valores padrão para a duração são
fonte
Você pode tentar:
dobrar o tempo. Se você especificar 3 em vez de 2, ele triplicará o tempo ... etc.
fonte
Toast.cancel()
em locais apropriados #Se você quer
Toast
persistir, descobri que você pode invadir o local fazendo umaTimer
ligaçãotoast.show()
repetidamente (a cada segundo, mais ou menos). A chamadashow()
não interrompe nada seToast
a tela já estiver sendo exibida, mas atualiza a quantidade de tempo que permanece na tela.fonte
ViewGroup
OnTouch
evento. Para otimizar esse você provavelmente deve fazer o seu temporizador Repita o mais próximo do tempo real oToast
é mostrado na tela (3,5 segundos por muito tempo, 2 segundos para o short)Eu desenvolvi uma classe Custom Toast com a qual você pode mostrar o Toast pelo período desejado (em mili segundos)
fonte
Eu codifiquei uma classe auxiliar para fazer isso. Você pode ver o código no github: https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastedActivity.java
É assim que você exibe uma torrada por 5 segundos (ou 5000 milissegundos):
fonte
Sei que estou um pouco atrasado, mas peguei a resposta de Regis_AG e envolvi-a em uma classe auxiliar e funciona muito bem.
No código do seu aplicativo, faça algo assim:
fonte
Eu sei que a resposta é muito tarde .. Eu tive o mesmo problema e decidi implementar minha própria versão do bare bones Toast, depois de procurar no código-fonte do Android o brinde.
Basicamente, você precisa criar um novo gerenciador de janelas e mostrar e ocultar a janela pela duração desejada usando um manipulador
Após a inicialização do layout, você pode usar seus próprios métodos de ocultar e mostrar
Agora tudo que você precisa é adicionar dois threads executáveis que chamam handleShow () e handleHide () que você pode postar no manipulador.
e a parte final
Esta foi uma implementação rápida e suja. Não levamos nenhum desempenho em consideração.
fonte
Brinde LONG_DELAY por 3,5 segundos e SHORT_DELAY brinde por 2 segundos .
O Toast usa internamente o INotificationManager e chama seu método enqueueToast toda vez que um Toast.show () é chamado.
Chamar o show () com SHORT_DELAY duas vezes enfileirará a mesma torrada novamente. ele será exibido por 4 segundos (2 segundos + 2 segundos).
Da mesma forma, chamar o show () com LONG_DELAY duas vezes colocará a mesma torrada novamente. será exibido por 7 segundos (3,5 segundos + 3,5 segundos)
fonte
Aqui está uma classe Toast personalizada que eu criei usando o código acima:
fonte
Se você precisar de um Toast longo, há uma alternativa prática, mas é necessário que o usuário clique no botão OK para que ele desapareça. Você pode usar um AlertDialog como este:
Se você tiver uma mensagem longa, é provável que não saiba quanto tempo levará para o usuário ler a mensagem; portanto, às vezes, é uma boa ideia exigir que ele clique no botão OK para continuar. No meu caso, uso essa técnica quando um usuário clica em um ícone de ajuda.
fonte
Service
, onde não há interface do usuário.Conforme mencionado por outras pessoas, o Android Toasts pode ser LENGTH_LONG ou LENGTH_SHORT. Não há como contornar isso, nem você deve seguir nenhum dos 'hacks' publicados.
O objetivo do Toasts é exibir informações "não essenciais" e, devido ao seu efeito prolongado, as mensagens podem ficar muito fora de contexto se sua duração exceder um determinado limite. Se os Toasts de estoque foram modificados para que possam ser exibidos por mais de LENGTH_LONG, a mensagem permanecerá na tela até o processo do aplicativo terminar, pois as visualizações de brinde são adicionadas ao WindowManager e não um ViewGroup no seu aplicativo. Eu diria que é por isso que é codificado.
Se você absolutamente precisar mostrar uma mensagem no estilo brinde por mais de três segundos e meio, recomendo criar uma exibição anexada ao conteúdo da Atividade, para que ela desapareça quando o usuário sair do aplicativo. Minha biblioteca do SuperToasts lida com esse problema e muitos outros, fique à vontade para usá-lo! Você provavelmente estaria interessado em usar SuperActivityToasts
fonte
Basta usar o SuperToast para fazer um brinde elegante em qualquer situação. Faça sua torrada colorida . Edite a cor da fonte e também o tamanho . Espero que seja tudo em um para você.
fonte
Por que comer torradas, quando você pode ter toda a Snackbar : https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Snackbar> Torradas, Torrada personalizada, Crouton
fonte
Aqui está um método muito simples que funcionou para mim:
for (int i=0; i < 3; i++) { Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT).show(); }
A duração de LENGTH_SHORT é de 2 segundos e LENGTH_LONG é de 3,5 segundos. Aqui, a mensagem de brinde será mostrada por 6 segundos, uma vez que está dentro de um loop for. Mas uma desvantagem desse método ocorre após cada 2 s, um pequeno efeito de desbotamento pode surgir. mas não é muito perceptível. Espero que seja útil
fonte
O usuário não pode definir a duração do Toast. porque a função scheduleTimeoutLocked () de NotificationManagerService não usa a duração do campo. o código fonte é o seguinte.
fonte
Use Crouton, é uma biblioteca Toast muito flexível.
Crouton
Você pode usá-lo como brindes:
ou você pode ir um pouco mais fundo e personalizá-lo mais, como definir o tempo para infinito! por exemplo, aqui quero mostrar uma mensagem de brinde até que o usuário a reconheça clicando nela.
Layout de custódia que será inflado para o brinde.
fonte
A duração do brinde pode ser hackeada usando um segmento que executa o brinde exclusivamente. Isso funciona (executa a torrada por 10 segundos, modifica o sono e o ctr ao seu gosto):
fonte
Um brinde com plano de fundo e vista personalizados fez o truque para mim. Testei-o no tablet nexus 7 e não notei nenhuma animação de fadein fadeout durante o loop. Aqui está a implementação:
Aqui está o texto personalizado usado no código acima:
@ drawable / fragment_background está fazendo meu brinde ter um canto arredondado como na versão kitkat. Você também pode adicionar outras visualizações no arquivo. Quaisquer modificações para aprimoramento e comentários são incentivadas, pois planejo implementar isso no meu aplicativo ao vivo.
fonte
Programe uma contagem regressiva até uma hora no futuro, com notificações regulares em intervalos ao longo do caminho. Exemplo de exibição de uma contagem regressiva de 30 segundos em um campo de texto:
fonte
Este texto desaparecerá em 5 segundos.
Edit: Como o Itai Spector no comentário disse que será mostrado cerca de 3,5 segundos, então use este código:
fonte
Não, e a maioria dos hacks listados aqui não funciona mais no Android 9. Mas há uma solução muito melhor: se você precisar de uma mensagem, use uma caixa de diálogo.
fonte
Uma abordagem muito simples para criar uma mensagem um pouco mais longa é a seguinte:
Observe que o exemplo acima elimina a opção LENGTH_SHORT para manter o exemplo simples.
Geralmente, você não deseja usar uma mensagem Toast para exibir mensagens por intervalos muito longos, pois esse não é o objetivo pretendido da classe Toast. Mas há momentos em que a quantidade de texto que você precisa exibir pode levar mais de 3,5 segundos para ler o usuário e, nesse caso, uma pequena extensão de tempo (por exemplo, para 6,5 segundos, como mostrado acima) pode, IMO, ser útil e consistente com o uso pretendido.
fonte
Define o brinde para um período específico em mili-segundos:
fonte
fonte
Depois de falhar com todas as soluções disponíveis, finalmente tive uma solução alternativa usando a recursão.
Código:
fonte
Uma solução muito simples para a pergunta. Duas ou três delas farão o Toast durar mais tempo. É a única maneira de contornar.
fonte
Você pode definir o tempo desejado em milissegundos no
Toast.makeText();
método desta forma:fonte