o que você quer dizer com torradas personalizadas? o que você está tentando mostrar?
thepoosh
Esta não é uma questão real. Você deve tentar ler os documentos em developer.android
adatapost
Eu tenho uma caixa de mensagem personalizada. Se você puder personalizá-lo e adicionar um cronômetro a ele e mudar sua aparência, eu o postarei para você. Você pode?
"(ViewGroup) findViewById (R.id.toast_layout_root)" pode ser substituído por "null". Como sua atividade não contém toast_layout, ela sempre será nula de qualquer maneira.
stevo.mit
2
Meu brinde personalizado não estava aparecendo porque eu estava usando o novo Layout de restrição como o rootview do meu brinde personalizado. Depois que mudei para o Layout Linear, tudo funcionou perfeitamente. Portanto, esteja avisado ...
Charles Woodson
realmente alguém poderia explicar o propósito de findViewById (R.id.toast_layout_root)? vai ser null de qualquer maneira, e funciona perfeitamente bem apenas passando null
use isso se você travar por findViewById for null: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
38
Um brinde serve para mostrar mensagens por curtos intervalos de tempo; Então, pelo meu entendimento, você gostaria de personalizá-lo adicionando uma imagem a ele e alterando o tamanho, a cor do texto da mensagem. Se isso é tudo que você deseja fazer, não há necessidade de fazer um layout separado e aumentá-lo para a instância do Toast.
A visualização padrão do Toast contém um TextViewpara mostrar mensagens nele. Então, se tivermos a referência de id do recurso disso TextView, podemos brincar com isso. Abaixo está o que você pode fazer para conseguir isso:
Toast toast =Toast.makeText(this,"I am custom Toast!",Toast.LENGTH_LONG);View toastView = toast.getView();// This'll return the default View of the Toast./* And now you can get the TextView of the default View of the Toast. */TextView toastMessage =(TextView) toastView.findViewById(android.R.id.message);
toastMessage.setTextSize(25);
toastMessage.setTextColor(Color.RED);
toastMessage.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.ic_fly,0,0,0);
toastMessage.setGravity(Gravity.CENTER);
toastMessage.setCompoundDrawablePadding(16);
toastView.setBackgroundColor(Color.CYAN);
toast.show();
No código acima você pode ver, você pode adicionar imagem ao TextView por meio de setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)qualquer posição relativa ao TextView que você deseja.
Há muito menos chances de isso, mas ainda assim, acho que um cheque para isso TextViewdeveria estar lá, apenas para ser seguro e por um cheque, quero dizer um cheque nulo ou um cheque de tipo. Por precaução, o Google decide alterar o id ou view para mostrar o texto na classe Toast. Enfim ... +1
DroidDev
1
Verdade! Mas se ele for alterado, você não conseguirá acessar o id do recurso de qualquer maneira por causa de sua não existência. Mas mesmo que por segurança, um cheque NULL tornaria sua vida mais fácil. @DroidDev obrigado pela sugestão :)
TheLittleNaruto
16
PASSO 1:
Primeiro crie um layout para um brinde personalizado em res/layout/custom_toast.xml:
ETAPA 2: no código de atividade, obtenha a visualização personalizada acima e anexe ao Toast:
// Get your custom_toast.xml ayoutLayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.custom_toast,(ViewGroup) findViewById(R.id.custom_toast_layout_id));// set a messageTextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Button is clicked!");// Toast...Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Para obter mais ajuda, veja como criamos o Toast personalizado no Android:
Veja o link aqui . Você encontra sua solução. E tentar:
Criação de uma tela de brinde personalizada
Se uma simples mensagem de texto não for suficiente, você pode criar um layout personalizado para sua notificação do sistema. Para criar um layout personalizado, defina um layout de Visualização, em XML ou no código do seu aplicativo, e passe o objeto de Visualização raiz para o método setView (Visualização).
Por exemplo, você pode criar o layout para o brinde visível na captura de tela à direita com o seguinte XML (salvo como toast_layout.xml):
Observe que o ID do elemento LinearLayout é "toast_layout". Você deve usar esse ID para aumentar o layout do XML, conforme mostrado aqui:
LayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.toast_layout,(ViewGroup) findViewById(R.id.toast_layout_root));ImageView image =(ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);TextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Hello! This is a custom toast!");Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Primeiro, recupere o LayoutInflater com getLayoutInflater () (ou getSystemService ()) e aumente o layout do XML usando inflate (int, ViewGroup). O primeiro parâmetro é o ID do recurso de layout e o segundo é a visualização raiz. Você pode usar este layout inflado para encontrar mais objetos View no layout, então agora capture e defina o conteúdo para os elementos ImageView e TextView. Por fim, crie um novo Toast with Toast (Contexto) e defina algumas propriedades da torrada, como a gravidade e a duração. Em seguida, chame setView (View) e passe o layout inflado. Agora você pode exibir o brinde com seu layout personalizado chamando show ().
Nota: Não use o construtor público para um Toast, a menos que você vá definir o layout com setView (View). Se você não tiver um layout personalizado para usar, deve usar makeText (Context, int, int) para criar o Toast.
Acho que a maioria dos exemplos de xml customtoast em toda a Internet são baseados na mesma fonte.
A documentação do Android, que está muito desatualizada na minha opinião. fill_parent não deve ser usado mais. Eu prefiro usar wrap_content em combinação com um xml.9.png. Dessa forma, você pode definir o tamanho mínimo de toastbackground em todo o tamanho da fonte fornecida.
Se brindes mais complexos são necessários, quadro ou layout relativo deve ser usado em vez de LL.
Para evitar problemas com os parâmetros layout_ * não sendo usados corretamente, você precisa se certificar de que, ao aumentar seu layout personalizado, especifique um ViewGroup correto como pai.
Muitos exemplos passam nulo aqui, mas em vez disso, você pode passar o Toast ViewGroup existente como seu pai.
val toast =Toast.makeText(this,"",Toast.LENGTH_LONG)
val layout =LayoutInflater.from(this).inflate(R.layout.view_custom_toast, toast.view.parent as?ViewGroup?)
toast.view = layout
toast.show()
Aqui, substituímos a visualização do Toast existente pela nossa visualização personalizada. Assim que tiver uma referência ao "layout" do seu layout, você poderá atualizar quaisquer imagens / visualizações de texto que ele possa conter.
Esta solução também evita que qualquer "Visualização não anexada ao gerenciador de janelas" travar usando null como pai.
Além disso, evite usar ConstraintLayout como sua raiz de layout personalizado, isso parece não funcionar quando usado dentro de um Toast.
Código para o arquivo de layout activity_main.xml.
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.android_examples.com.toastbackgroundcolorchange.MainActivity"><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="CLICK HERE TO SHOW TOAST MESSAGE WITH DIFFERENT BACKGROUND COLOR INCLUDING BORDER"/></RelativeLayout>
Código para o arquivo de layout toast_background_color.xml criado na pasta res-> layout.
Os toast personalizados do plano de fundo são bloqueados, o Android 11 protege os usuários desativando as visualizações personalizadas do sistema. Por motivos de segurança e para manter uma boa experiência do usuário, o sistema bloqueia toasts que contêm visualizações personalizadas se esses toasts forem enviados do plano de fundo por um aplicativo voltado para o Android 11.
Método addCallback () adicionado no Android R Se você quiser ser notificado quando um brinde (texto ou personalizado) aparecer ou desaparecer.
O texto mais importante na API do toast muda que, para aplicativos direcionados ao Android 11, o getView()método retorna nulo quando você acessa. Portanto, certifique-se de proteger seus aplicativos de EXCEÇÃO FATAL, você sabe o que quero dizer :)
Respostas:
Use o código abaixo de um brinde personalizado. Isso pode te ajudar.
toast.xml
MainActivity.java
E verifique os links abaixo também para um Toast personalizado.
Brinde personalizado com relógio analógico
YouTube: Criando brinde personalizado com botão no Android Studio
fonte
Um brinde serve para mostrar mensagens por curtos intervalos de tempo; Então, pelo meu entendimento, você gostaria de personalizá-lo adicionando uma imagem a ele e alterando o tamanho, a cor do texto da mensagem. Se isso é tudo que você deseja fazer, não há necessidade de fazer um layout separado e aumentá-lo para a instância do Toast.
A visualização padrão do Toast contém um
TextView
para mostrar mensagens nele. Então, se tivermos a referência de id do recurso dissoTextView
, podemos brincar com isso. Abaixo está o que você pode fazer para conseguir isso:No código acima você pode ver, você pode adicionar imagem ao TextView por meio de
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
qualquer posição relativa ao TextView que você deseja.Atualizar:
Escreveu uma classe de construtor para simplificar o propósito acima; Aqui está o link: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc
Verifique o
HowToUse.kt
link acima.Resultado:
fonte
TextView
deveria estar lá, apenas para ser seguro e por um cheque, quero dizer um cheque nulo ou um cheque de tipo. Por precaução, o Google decide alterar o id ou view para mostrar o texto na classe Toast. Enfim ... +1PASSO 1:
Primeiro crie um layout para um brinde personalizado em
res/layout/custom_toast.xml
:ETAPA 2: no código de atividade, obtenha a visualização personalizada acima e anexe ao Toast:
Para obter mais ajuda, veja como criamos o Toast personalizado no Android:
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
fonte
Veja o link aqui . Você encontra sua solução. E tentar:
Criação de uma tela de brinde personalizada
Se uma simples mensagem de texto não for suficiente, você pode criar um layout personalizado para sua notificação do sistema. Para criar um layout personalizado, defina um layout de Visualização, em XML ou no código do seu aplicativo, e passe o objeto de Visualização raiz para o método setView (Visualização).
Por exemplo, você pode criar o layout para o brinde visível na captura de tela à direita com o seguinte XML (salvo como toast_layout.xml):
Observe que o ID do elemento LinearLayout é "toast_layout". Você deve usar esse ID para aumentar o layout do XML, conforme mostrado aqui:
Primeiro, recupere o LayoutInflater com getLayoutInflater () (ou getSystemService ()) e aumente o layout do XML usando inflate (int, ViewGroup). O primeiro parâmetro é o ID do recurso de layout e o segundo é a visualização raiz. Você pode usar este layout inflado para encontrar mais objetos View no layout, então agora capture e defina o conteúdo para os elementos ImageView e TextView. Por fim, crie um novo Toast with Toast (Contexto) e defina algumas propriedades da torrada, como a gravidade e a duração. Em seguida, chame setView (View) e passe o layout inflado. Agora você pode exibir o brinde com seu layout personalizado chamando show ().
Nota: Não use o construtor público para um Toast, a menos que você vá definir o layout com setView (View). Se você não tiver um layout personalizado para usar, deve usar makeText (Context, int, int) para criar o Toast.
fonte
Layout personalizado para torradas
custom_toast.xml
:E o método Java (basta passar a mensagem do sistema para este método):
fonte
Você pode baixar o código aqui .
Passo 1:
Passo 2:
Etapa 3:
fonte
Acho que a maioria dos exemplos de xml customtoast em toda a Internet são baseados na mesma fonte.
A documentação do Android, que está muito desatualizada na minha opinião. fill_parent não deve ser usado mais. Eu prefiro usar wrap_content em combinação com um xml.9.png. Dessa forma, você pode definir o tamanho mínimo de toastbackground em todo o tamanho da fonte fornecida.
Se brindes mais complexos são necessários, quadro ou layout relativo deve ser usado em vez de LL.
toast.xml
background.xml
background_96 é background_96.9.png.
Isso não foi testado muito bem e sugestões são bem-vindas :)
fonte
Para evitar problemas com os parâmetros layout_ * não sendo usados corretamente, você precisa se certificar de que, ao aumentar seu layout personalizado, especifique um ViewGroup correto como pai.
Muitos exemplos passam nulo aqui, mas em vez disso, você pode passar o Toast ViewGroup existente como seu pai.
Aqui, substituímos a visualização do Toast existente pela nossa visualização personalizada. Assim que tiver uma referência ao "layout" do seu layout, você poderá atualizar quaisquer imagens / visualizações de texto que ele possa conter.
Esta solução também evita que qualquer "Visualização não anexada ao gerenciador de janelas" travar usando null como pai.
Além disso, evite usar ConstraintLayout como sua raiz de layout personalizado, isso parece não funcionar quando usado dentro de um Toast.
fonte
Isso é o que eu usei
AllMethodsInOne.java
YourFile.java
Ao ligar, basta escrever abaixo.
fonte
Código para o arquivo MainActivity.java.
Código para o arquivo de layout activity_main.xml.
Código para o arquivo de layout toast_background_color.xml criado na pasta res-> layout.
fonte
// Uma classe de notificação personalizada onde você pode mostrar a notificação personalizada ou padrão conforme desejado
fonte
Maneira simples de personalizar a torrada,
fonte
Para todos os usuários Kotlin
Você pode criar uma extensão como a seguir:
fonte
É muito simples criar nosso próprio
Toast
.Basta seguir as etapas abaixo.
Passo 1
Crie o layout personalizado que você deseja
Passo 2
Agora crie a classe personalizada que estende com
Toast
.Nós criamos o brinde personalizado.
Etapa 3
Agora, finalmente, como podemos usá-lo.
Aproveitar!!
fonte
Alerta, atualizações de brindes no Android 11
Método addCallback () adicionado no Android R Se você quiser ser notificado quando um brinde (texto ou personalizado) aparecer ou desaparecer.
O texto mais importante na API do toast muda que, para aplicativos direcionados ao Android 11, o
getView()
método retorna nulo quando você acessa. Portanto, certifique-se de proteger seus aplicativos de EXCEÇÃO FATAL, você sabe o que quero dizer :)fonte
Usando esta biblioteca chamada Toasty , acho que você tem flexibilidade suficiente para fazer um brinde personalizado com a seguinte abordagem -
Você também pode passar texto formatado para Toasty e aqui está o snippet de código
fonte
Referência: https://developer.android.com/guide/topics/ui/notifiers/toasts
fonte