Brinde personalizado no Android: um exemplo simples

117

Sou novo na programação do Android. Qual é um exemplo simples que mostra uma notificação do sistema personalizada no Android?

Sandy
fonte
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?
Bobs
1
Aqui você pode encontrar um exemplo básico de "Custom Toast" stackoverflow.com/questions/3500197/…
Jorgesys

Respostas:

198

Use o código abaixo de um brinde personalizado. Isso pode te ajudar.

toast.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:background="#DAAA" >

    <ImageView android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="10dp" />

    <TextView android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textColor="#FFF" />

</LinearLayout>

MainActivity.java

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 = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

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

Dipak Keshariya
fonte
8
"(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
sergey.n
Também não sei a finalidade da view root (null), mas na documentação oficial também está presente, se alguém puder explicar o porquê, seria ótimo! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez
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.

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.ktlink acima.

Resultado:

Insira a descrição da imagem aqui

TheLittleNaruto
fonte
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:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_toast_layout_id"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF"
    android:orientation="horizontal"
    android:padding="5dp" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:textColor="#000" />

</LinearLayout>

ETAPA 2: no código de atividade, obtenha a visualização personalizada acima e anexe ao Toast:

// Get your custom_toast.xml ayout
LayoutInflater inflater = getLayoutInflater();

View layout = inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.custom_toast_layout_id));

// set a message
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Button is clicked!");

// Toast...
Toast toast = new Toast(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:

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

ρяσѕρєя K
fonte
6

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):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/toast_layout_root"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="10dp"
            android:background="#DAAA"
>

    <ImageView android:id="@+id/image"
               android:layout_width="wrap_content"
               android:layout_height="fill_parent"
               android:layout_marginRight="10dp"
    />

    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
    />
</LinearLayout>

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 = new Toast(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.

Deepak Swami
fonte
4

Layout personalizado para torradas custom_toast.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Custom Toast"
        android:gravity="center"
        android:id="@+id/custom_toast_text"
        android:typeface="serif"
        android:textStyle="bold"
        />
</LinearLayout>

E o método Java (basta passar a mensagem do sistema para este método):

public void toast(String message)
{
    Toast toast = new Toast(context);
    View view = LayoutInflater.from(context).inflate(R.layout.image_custom, null);
    TextView textView = (TextView) view.findViewById(R.id.custom_toast_text);
    textView.setText(message);
    toast.setView(view);
    toast.setGravity(Gravity.BOTTOM|Gravity.CENTER, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.show();
}
Sai Gopi Me
fonte
3

Você pode baixar o código aqui .

Passo 1:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns: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=".MainActivity">

    <Button
        android:id="@+id/btnCustomToast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Custom Toast" />
  </RelativeLayout>

Passo 2:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/custom_toast_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"/>

        <TextView
            android:id="@+id/custom_toast_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="My custom Toast Example Text" />

</LinearLayout>

Etapa 3:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    private Button btnCustomToast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnCustomToast= (Button) findViewById(R.id.btnCustomToast);
        btnCustomToast.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // Find custom toast example layout file
                View layoutValue = LayoutInflater.from(MainActivity.this).inflate(R.layout.android_custom_toast_example, null);
                // Creating the Toast object
                Toast toast = new Toast(getApplicationContext());
                toast.setDuration(Toast.LENGTH_SHORT);

                // gravity, xOffset, yOffset
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.setView(layoutValue);//setting the view of custom toast layout
                toast.show();
            }
        });
    }
}
nirav kalola
fonte
2

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/points_layout"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:layout_gravity="center"
    android:gravity="center" >

 <TextView
    android:id="@+id/points_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:layout_margin="15dp"
    android:text="@+string/points_text"
    android:textColor="@color/Green" />

</LinearLayout>

background.xml

<?xml version="1.0" encoding="utf-8"?>
<nine-patch
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:src="@drawable/background_96"
   android:dither="true"/>

background_96 é background_96.9.png.

Isso não foi testado muito bem e sugestões são bem-vindas :)

ou mais estranho
fonte
@PeterMortensen LinearLayout
ornay odder
2

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.

Andrew Kelly
fonte
2

Isso é o que eu usei

AllMethodsInOne.java

public static Toast displayCustomToast(FragmentActivity mAct, String toastText, String toastLength, String succTypeColor) {

    final Toast toast;

    if (toastLength.equals("short")) {
        toast = Toast.makeText(mAct, toastText, Toast.LENGTH_SHORT);
    } else {
        toast = Toast.makeText(mAct, toastText, Toast.LENGTH_LONG);
    }

    View tView = toast.getView();
    tView.setBackgroundColor(Color.parseColor("#053a4d"));
    TextView mText = (TextView) tView.findViewById(android.R.id.message);

    mText.setTypeface(applyFont(mAct));
    mText.setShadowLayer(0, 0, 0, 0);

    tView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            toast.cancel();
        }
    });
    tView.invalidate();
    if (succTypeColor.equals("red")) {
        mText.setTextColor(Color.parseColor("#debe33"));
        tView.setBackground(mAct.getResources().getDrawable(R.drawable.toast_rounded_red));
        // this is to show error message
    }
    if (succTypeColor.equals("green")) {
        mText.setTextColor(Color.parseColor("#053a4d"));
        tView.setBackground(mAct.getResources().getDrawable(R.drawable.toast_rounded_green));
        // this is to show success message
    }


    return toast;
}

YourFile.java

Ao ligar, basta escrever abaixo.

AllMethodsInOne.displayCustomToast(act, "This is custom toast", "long", "red").show();
Fahim Parkar
fonte
toast_rounded_red não foi encontrado. Onde nós o criamos?
goops17
@ goops17: Este é um arquivo drawable com fundo vermelho e verde. Em vez disso, você pode dar a cor de fundo ...
Fahim Parkar
1

Código para o arquivo MainActivity.java.

package com.android_examples.com.toastbackgroundcolorchange;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {

 Button BT;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 BT = (Button)findViewById(R.id.button1);
 BT.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {

 Toast ToastMessage = Toast.makeText(getApplicationContext(),"Change Toast Background color",Toast.LENGTH_SHORT);
 View toastView = ToastMessage.getView();
 toastView.setBackgroundResource(R.layout.toast_background_color);
 ToastMessage.show();

 }
 });
 }
}

Código para o arquivo de layout activity_main.xml.

<RelativeLayout xmlns: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" >

 <Button
 android: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.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

 <stroke
    android:width="3dp"
    android:color="#ffffff" ></stroke>
<padding android:left="20dp" android:top="20dp"
    android:right="20dp" android:bottom="20dp" />
<corners android:radius="10dp" />
<gradient android:startColor="#ff000f"
    android:endColor="#ff0000"
    android:angle="-90"/>

</shape>
Waruna Manjula
fonte
1

// Uma classe de notificação personalizada onde você pode mostrar a notificação personalizada ou padrão conforme desejado

public class ToastMessage {
    private Context context;
    private static ToastMessage instance;

    /**
     * @param context
     */
    private ToastMessage(Context context) {
        this.context = context;
    }

    /**
     * @param context
     * @return
     */
    public synchronized static ToastMessage getInstance(Context context) {
        if (instance == null) {
            instance = new ToastMessage(context);
        }
        return instance;
    }

    /**
     * @param message
     */
    public void showLongMessage(String message) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    /**
     * @param message
     */
    public void showSmallMessage(String message) {
        Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }

    /**
     * The Toast displayed via this method will display it for short period of time
     *
     * @param message
     */
    public void showLongCustomToast(String message) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast));
        TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg);
        msgTv.setText(message);
        Toast toast = new Toast(context);
        toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();


    }

    /**
     * The toast displayed by this class will display it for long period of time
     *
     * @param message
     */
    public void showSmallCustomToast(String message) {

        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast));
        TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg);
        msgTv.setText(message);
        Toast toast = new Toast(context);
        toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(layout);
        toast.show();
    }

}
Amardeep
fonte
1

Maneira simples de personalizar a torrada,

private void MsgDisplay(String Msg, int Size, int Grav){
    Toast toast = Toast.makeText(this, Msg, Toast.LENGTH_LONG);
    TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
    v.setTextColor(Color.rgb(241, 196, 15));
    v.setTextSize(Size);
    v.setGravity(Gravity.CENTER);
    v.setShadowLayer(1.5f, -1, 1, Color.BLACK);
    if(Grav == 1){
        toast.setGravity(Gravity.BOTTOM, 0, 120);
    }else{
        toast.setGravity(Gravity.BOTTOM, 0, 10);
    }
    toast.show();
}
Chathura
fonte
1

Para todos os usuários Kotlin

Você pode criar uma extensão como a seguir:

fun FragmentActivity.showCustomToast(message : String,color : Int) {
 val toastView = findViewById<TextView>(R.id.toast_view)
 toastView.text = message
 toastView.visibility = View.VISIBLE
 toastView.setBackgroundColor(color)

 // create a daemon thread
 val timer = Timer("schedule", true)

 // schedule a single event
 timer.schedule(2000) {
    runOnUiThread { toastView.visibility = View.GONE }
 }
}
Lukas
fonte
1

É muito simples criar nosso próprio Toast .

Basta seguir as etapas abaixo.

Passo 1

Crie o layout personalizado que você deseja

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/black"
    android:orientation="vertical"
    android:padding="@dimen/size_10dp"
    app:cardCornerRadius="@dimen/size_8dp"
    app:cardElevation="@dimen/size_8dp">

    <TextView
        android:id="@+id/txt_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="@dimen/size_12dp"
        android:textAlignment="center"
        android:textColor="@color/white"
        android:textSize="@dimen/text_size_16sp"
        tools:text="Hello Test!!" />

</androidx.cardview.widget.CardView>

Passo 2

Agora crie a classe personalizada que estende com Toast.

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.shop.shoppinggare.R;

import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Text;

public class CustomToast extends Toast {
    private Context context;
    private String message;

    public CustomToast(Context context, String message) {
        super(context);
        this.context = context;
        this.message = message;
        View view = LayoutInflater.from(context).inflate(R.layout.toast_custom, null);
        TextView txtMsg = view.findViewById(R.id.txt_message);
        txtMsg.setText(StringUtils.capitalize(message));
        setView(view);
        setDuration(Toast.LENGTH_LONG);

    }


}

Nós criamos o brinde personalizado.

Etapa 3

Agora, finalmente, como podemos usá-lo.

new CustomToast(contex,"message").show();

Aproveitar!!

Deepak gupta
fonte
0

Alerta, atualizações de brindes no Android 11

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 :)

Anoop M
fonte
0

Usando esta biblioteca chamada Toasty , acho que você tem flexibilidade suficiente para fazer um brinde personalizado com a seguinte abordagem -

Toasty.custom(yourContext, "I'm a custom Toast", yourIconDrawable, tintColor, duration, withIcon, 
shouldTint).show();

Você também pode passar texto formatado para Toasty e aqui está o snippet de código

Gk Mohammad Emon
fonte
-1
val inflater = layoutInflater
val container: ViewGroup = findViewById(R.id.custom_toast_container)
val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
val text: TextView = layout.findViewById(R.id.text)
text.text = "This is a custom toast"
with (Toast(applicationContext)) {
    setGravity(Gravity.CENTER_VERTICAL, 0, 0)
    duration = Toast.LENGTH_LONG
    view = layout
    show()
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/custom_toast_container"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="8dp"
              android:background="#DAAA"
              >
    <ImageView android:src="@drawable/droid"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginRight="8dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="#FFF"
              />
</LinearLayout>

Referência: https://developer.android.com/guide/topics/ui/notifiers/toasts

Ajay Prajapati
fonte