Toast personnalisé sur Android: un exemple simple

117

Je suis nouveau dans la programmation Android. Qu'est-ce qu'un exemple simple montrant une notification toast personnalisée sur Android?

Sablonneux
la source
qu'entendez-vous par toast personnalisé? qu'essayez-vous de montrer?
thepoosh
Ce n'est pas une vraie question. Vous devriez essayer de lire la documentation sur developer.android
adatapost
J'ai une boîte de message personnalisée. Si vous pouvez le personnaliser, lui ajouter une minuterie et changer son apparence, je le poste pour vous. Peut tu?
Bobs
1
Ici vous pouvez trouver un exemple de base de "Toast personnalisé" stackoverflow.com/questions/3500197
...

Réponses:

198

Utilisez le code ci-dessous d'un toast personnalisé. Cela peut vous aider.

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();

Et consultez les liens ci-dessous également pour un toast personnalisé.

Toast personnalisé avec horloge analogique

YouTube: création d'un toast personnalisé avec un bouton dans Android Studio

Dipak Keshariya
la source
8
"(ViewGroup) findViewById (R.id.toast_layout_root)" peut être remplacé par "null". Parce que votre activité ne contient pas toast_layout, elle sera toujours nulle de toute façon.
stevo.mettre le
2
Mon toast personnalisé ne s'affichait pas parce que j'utilisais la nouvelle mise en page de contraintes comme vue racine de mon toast personnalisé. Une fois que je suis passé à la disposition linéaire, tout fonctionnait parfaitement. Alors soyez prévenu ...
Charles Woodson
vraiment n'importe qui pourrait expliquer le but de findViewById (R.id.toast_layout_root)? ça va être nul de toute façon, et ça marche parfaitement bien avec juste passer null
sergey.n
Je ne connais pas non plus le but de la vue racine (null), mais dans la documentation officielle est également présente, si quelqu'un peut expliquer pourquoi, ce serait génial! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez
utilisez ceci si vous plantez par findViewById est null: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
38

Un toast est pour montrer des messages pendant de courts intervalles de temps; Ainsi, selon ma compréhension, vous souhaitez le personnaliser en y ajoutant une image et en changeant la taille, la couleur du texte du message. Si c'est tout ce que vous voulez faire, il n'est pas nécessaire de créer une mise en page séparée et de la gonfler dans l'instance Toast.

La vue par défaut de Toast contient un TextViewpour afficher les messages dessus. Donc, si nous avons la référence d'identifiant de ressource de cela TextView, nous pouvons jouer avec. Voici donc ce que vous pouvez faire pour y parvenir:

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();

Dans le code ci-dessus que vous pouvez voir, vous pouvez ajouter une image à TextView via la setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)position par rapport à TextView que vous souhaitez.

Mettre à jour:

Avoir écrit une classe de constructeur pour simplifier l'objectif ci-dessus; Voici le lien: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc

Vérifiez le HowToUse.ktlien ci-dessus.

Production:

Entrez la description de l'image ici

TheLittleNaruto
la source
Il y a très moins de chances que cela se produise, mais encore, je pense qu'un chèque TextViewdevrait être là, juste pour être sûr et par un chèque, je veux dire un chèque nul ou un chèque de type. Juste au cas où, Google décide de modifier l'identifiant ou la vue pour afficher le texte dans la classe Toast. Quoi qu'il en soit ... +1
DroidDev
1
Vrai! Mais s'il est modifié, vous ne pourrez de toute façon pas accéder à l'identifiant de la ressource en raison de son inexistence. Mais même pour être en sécurité, une vérification NULL vous faciliterait la vie. @DroidDev merci pour la suggestion :)
TheLittleNaruto
16

ÉTAPE 1:

Créez d'abord une mise en page pour un toast personnalisé dans 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>

ÉTAPE 2: Dans le code d'activité, obtenez la vue personnalisée ci-dessus et attachez-la à 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();

Pour plus d'informations, découvrez comment nous créons un toast personnalisé sur Android:

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

ρяσѕρєя K
la source
6

Voir le lien ici . Vous trouvez votre solution. Et essaye:

Création d'une vue Toast personnalisée

Si un simple message texte ne suffit pas, vous pouvez créer une mise en page personnalisée pour votre notification toast. Pour créer une mise en page personnalisée, définissez une mise en page View, en XML ou dans votre code d'application, et transmettez l'objet View racine à la méthode setView (View).

Par exemple, vous pouvez créer la mise en page du toast visible dans la capture d'écran à droite avec le XML suivant (enregistré sous 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>

Notez que l'ID de l'élément LinearLayout est "toast_layout". Vous devez utiliser cet ID pour gonfler la mise en page à partir du XML, comme indiqué ici:

 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();

Tout d'abord, récupérez le LayoutInflater avec getLayoutInflater () (ou getSystemService ()), puis gonflez la mise en page à partir de XML en utilisant inflate (int, ViewGroup). Le premier paramètre est l'ID de la ressource de mise en page et le second est la vue racine. Vous pouvez utiliser cette mise en page gonflée pour trouver plus d'objets View dans la mise en page, alors capturez et définissez maintenant le contenu des éléments ImageView et TextView. Enfin, créez un nouveau Toast avec Toast (Contexte) et définissez certaines propriétés du toast, telles que la gravité et la durée. Appelez ensuite setView (View) et transmettez-lui la mise en page gonflée. Vous pouvez maintenant afficher le toast avec votre disposition personnalisée en appelant show ().

Remarque: n'utilisez pas le constructeur public pour un Toast, sauf si vous allez définir la disposition avec setView (View). Si vous n'avez pas de disposition personnalisée à utiliser, vous devez utiliser makeText (Context, int, int) pour créer le Toast.

Deepak Swami
la source
4

Mise en page personnalisée pour le pain grillé, 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>

Et la méthode Java (transmettez simplement le message toast à cette méthode):

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 moi
la source
3

Vous pouvez télécharger le code ici .

Étape 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>

Étape 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>

Étape 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
la source
2

Je pense que la plupart des exemples XML customtoast sur Internet sont basés sur la même source.

La documentation Android, qui est à mon avis très obsolète. fill_parent ne doit plus être utilisé. Je préfère utiliser wrap_content en combinaison avec un xml.9.png. De cette façon, vous pouvez définir la taille minimale de toastbackground sur toute la taille de la source fournie.

Si des toasts plus complexes sont nécessaires, un cadre ou une disposition relative doit être utilisé à la place 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 est background_96.9.png.

Ce n'est pas très bien testé, et les indices sont appréciés :)

ornay odder
la source
@PeterMortensen LinearLayout
ornay odder
2

Pour éviter que les paramètres layout_ * ne soient correctement utilisés, vous devez vous assurer que lorsque vous gonflez votre mise en page personnalisée, vous spécifiez un ViewGroup correct en tant que parent.

De nombreux exemples passent null ici, mais à la place, vous pouvez passer le Toast ViewGroup existant en tant que parent.

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

Ici, nous remplaçons la vue Toast existante par notre vue personnalisée. Une fois que vous avez une référence à votre "mise en page", vous pouvez mettre à jour toutes les images / vues de texte qu'elle peut contenir.

Cette solution empêche également les pannes de "Vue non attachée au gestionnaire de fenêtres" d'utiliser null comme parent.

Évitez également d'utiliser ConstraintLayout comme racine de mise en page personnalisée, cela semble ne pas fonctionner lorsqu'il est utilisé dans un Toast.

Andrew Kelly
la source
2

C'est ce que j'ai utilisé

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

En appelant, écrivez ci-dessous.

AllMethodsInOne.displayCustomToast(act, "This is custom toast", "long", "red").show();
Fahim Parkar
la source
toast_rounded_red ceci ne peut pas être trouvé. Où le créons-nous?
goops17
@ goops17: C'est un fichier dessinable qui a un arrière-plan rouge, vert. Au lieu de cela, vous pouvez donner une couleur d'arrière-plan ...
Fahim Parkar
1

Code pour le fichier 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();

 }
 });
 }
}

Code du fichier de mise en page 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>

Code du fichier de mise en page toast_background_color.xml créé dans le dossier 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
la source
1

// Une classe de toast personnalisée où vous pouvez afficher des toasts personnalisés ou par défaut comme vous le souhaitez)

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
la source
1

Un moyen simple de personnaliser le pain grillé,

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
la source
1

Pour tous les utilisateurs de Kotlin

Vous pouvez créer une extension comme suit:

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
la source
1

Il est très simple de créer notre propre coutume Toast.

Suivez simplement les étapes ci-dessous.

Étape 1

Créez la mise en page personnalisée que vous souhaitez

<?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>

Étape 2

Créez maintenant la classe personnalisée qui s'étend avec 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);

    }


}

Nous avons créé le toast personnalisé.

Étape 3

Maintenant, enfin, comment pouvons-nous l'utiliser.

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

Prendre plaisir!!

Deepak gupta
la source
0

Attention, mises à jour des toasts dans Android 11

Les toasts personnalisés de l'arrière-plan sont bloqués, Android 11 protège les utilisateurs en abandonnant les vues de toast personnalisées. Pour des raisons de sécurité et pour maintenir une bonne expérience utilisateur, le système bloque les toasts contenant des vues personnalisées si ces toasts sont envoyés depuis l'arrière-plan par une application qui cible Android 11.

Ajout de la méthode addCallback () dans Android R Si vous souhaitez être averti lorsqu'un toast (texte ou personnalisé) apparaît ou disparaît.

Le texte le plus important de l' API toast change que pour les applications qui ciblent Android 11, la getView()méthode retourne null lorsque vous y accédez.Assurez-vous donc de protéger vos applications de FATAL EXCEPTION, vous savez ce que je veux dire :)

Anoop M
la source
0

En utilisant cette bibliothèque nommée Toasty, je pense que vous avez suffisamment de flexibilité pour faire un toast personnalisé par l'approche suivante -

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

Vous pouvez également transmettre du texte formaté à Toasty et voici l' extrait de code

Gk Mohammad Emon
la source
-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>

Référence: https://developer.android.com/guide/topics/ui/notifiers/toasts

Ajay Prajapati
la source